Preparedstatement :执行sql的对象
-
SQL注入问题:在拼接sq1时,有一些sql的特殊关 键字参与字符串的拼接。会造成安全性问题
输入用户随便,输入密码: ‘a’ or ‘a’ = ‘a’
sql : select * from user where username = ’ wdaad’ and password = ‘a’ or ‘a’= ‘a’ -
解决sql注入问题:使用preparedstatement对象来解决
-
预编译的SQL :参数使用?作为占位符
-
步骤:
1.导入驱动jar包mysql-connector
2.注册驱动
3.获取数据库连接对象Connection
4.定义sql
注意: sql的参数使用?作为占位符。
如: select * from user where username = ? and password = ?; -
获取执行sql语句的对象Preparedstatement Connection. preparestatement(String sql)
-
给?赋值:
方法: setxxx(参数1,参数2)
参数1: ?的位置编号从1开始
参数2: ?的值 -
执行sql, 接受返回结果,不需要传递sql语句
-
处理结果
-
释放资源
后期都会使用Preparedstatement来完成增删改查的所有操作
1.防止SQL注入
2.效率更高
例如:
public static boolean check(String name,String password){
if (name==null||password==null){
return false;
}
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
conn = JDBCUtils.getConnection();//工具类连接,不是重点
//重点
String sql = "select * from user where username= ? and password=? ";
pstmt = conn.prepareStatement(sql);
//给?赋值
pstmt.setString(1,name);
pstmt.setString(2,password);
//执行不需要传参
rs = pstmt.executeQuery();
return rs.next();
} catch (SQLException e) {
e.printStackTrace();
}finally{
//记得最后释放资源,工具类,不是重点
JDBCUtils.close(rs,pstmt,conn);
}
return false;
}
}