题目:
练习: ①通过键盘录入用户名和密码 ②判断用户是否登录成功
方法1:
import util.JDBCUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class JDBCDemo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
boolean flag = new JDBCDemo2().loginFun(username, password);
if(flag){
System.out.println("登录成功!");
}else {
System.out.println("您的用户名和密码有误!");
}
}
public boolean loginFun(String username,String password){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
//1.注册驱动
//把工具类加载进来,就会执行静态代码,使用数据库连接
try {
//2.获取连接数据库对象Connection
conn = JDBCUtils.getConnection();
//3.准备好sql
String sql = "select * from user where username='"+username+"' and password='"+password+"'";
//4.获取执行sql的对象
stmt = conn.createStatement();
//5.执行sql
rs = stmt.executeQuery(sql);
//6.处理结果
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(rs,stmt,conn);
}
return false;
}
}
方法2:
import util.JDBCUtils;
import java.sql.*;
import java.util.Scanner;
public class JDBCDemo3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String username = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
boolean flag = new JDBCDemo2().loginFun(username, password);
if(flag){
System.out.println("登录成功!");
}else {
System.out.println("您的用户名和密码有误!");
}
}
public boolean loginFun(String username,String password){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
//1.注册驱动
//把工具类加载进来,就会执行静态代码,使用数据库连接
try {
//2.获取连接数据库对象Connection
conn = JDBCUtils.getConnection();
//3.准备好sql,使用了?这个占位符
String sql = "select * from user where username= ? and password= ? ";
//4.获取执行sql的对象
pstmt = conn.prepareStatement(sql);
//给?赋值的操作
pstmt.setString(1,username);
pstmt.setString(2,password);
//5.执行sql
rs = pstmt.executeQuery(sql);
//6.处理结果
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtils.close(rs,pstmt,conn);
}
return false;
}
}
结论:
(1)SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全问题
(2)解决sql注入问题:使用PreparedStatement对象来解决
(3)预编译的sql:参数使用?作为占位符
(4)步骤:
(1)导入驱动jar包
①复制jar到项目的libs(自己建立方便管理)文件夹里
②右键,点击Add as Library
(2)注册驱动
(3)获取数据库连接对象 Connection
(4)定义sql
①注意:sql的参数使用?作为占位符。
②比如:select * from user where username = ? and password = ?;
(5)获取执行sql语句的对象 PreparedStatement Connection.preparedStatement(String sql)
不同点:给?赋值
* 方法:setXxx(参数1,参数2)
参数1:问号的编号,从1开始
参数2:?的值
(6)执行sql,接收返回结果
(7)处理结果
(8)释放资源