练习:
* 需求:
1. 通过键盘录入用户名和密码
2. 判断用户是否登录成功
例:
import cn.itcast.util.JDBCUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
/**
* 练习:
* * 需求:
* 1. 通过键盘录入用户名和密码
* 2. 判断用户是否登录成功
*/
public class JDBCDemo9 {
public static void main(String[] args) {
//1 键盘输入,接收用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请登录");
String username = sc.nextLine();
System.out.println("请输入密码");
String password = sc.nextLine();
//2 调用方法
boolean flag = new JDBCDemo9().login(username, password);
//3 判断结果, 输出不同的语句
if(flag = true){
System.out.println("成功");
}else {
System.out.println("失败");
}
}
//登录方法
public boolean login(String username, String password) {
if (username == null || password == null) {
}
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
//1 获取连接
try {
conn = JDBCUtils.getConnection();
//2 定义sql
String sql = "select * from user where username = '" + username + "' and password = '" + password + "' ";
//3 获取执行sql对象
stmt = conn.createStatement();
//4 执行查询
rs = stmt.executeQuery(sql);
//5 判断
return rs.next(); //如果有下一行返回true
} catch (SQLException e) {
e.printStackTrace();
} finally {
//6 关闭资源
JDBCUtils.close(rs, stmt, conn);
}
return false;
}
}
PreparedStatement:执行sql的对象
1. SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
1. 输入用户随便,输入密码:a’ or ‘a’ = 'a
2. sql:select * from user where username = ‘fhdsjkf’ and password = ‘a’ or ‘a’ = ‘a’
-
解决sql注入问题:使用PreparedStatement对象来解决
3. 预编译的SQL:参数使用?作为占位符
4. 步骤:
1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
2. 注册驱动
3. 获取数据库连接对象 Connection
4. 定义sql
* 注意:sql的参数使用?作为占位符。 如:select * from user where username = ? and password = ?;
5. 获取执行sql语句的对象 PreparedStatement Connection.prepareStatement(String sql)
6. 给?赋值:
* 方法: setXxx(参数1,参数2)
* 参数1:?的位置编号 从1 开始
* 参数2:?的值
7. 执行sql,接受返回结果,不需要传递sql语句
8. 处理结果
9. 释放资源5. 注意:后期都会使用PreparedStatement来完成增删改查的所有操作 1. 可以防止SQL注入 2. 效率更高
例:
//登录方法
public boolean login2(String username, String password) {
if (username == null || password == null) {
return false;
}
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
//1 获取连接
try {
conn = JDBCUtils.getConnection();
//2 定义sql
String sql = "select * from user where username = ? and password = ? ";
//3 获取执行sql对象
pstmt = conn.prepareStatement(sql);
// 给?赋值
pstmt.setString(1,username);
pstmt.setString(2,password);
//4 执行查询
rs = pstmt.executeQuery();
//5 判断
return rs.next(); //如果有下一行返回true
} catch (SQLException e) {
e.printStackTrace();
} finally