PreparedStatement 继承自Statement
PreparedStatement作用:
1.预编译SQL语句并执行:
预防SQL注入问题
2.SQL注入:(账号随便填,密码写脚本)
SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法
操作步骤:
1.获取PreparedStatement对象
(SQL语句中的参数值,使用?占位符替代)
String sql = "select * from db_user where username = ? and password = ?";
(通过connection对象获取,并传入对应的sql语句)
PreparedStatement pstmt = conn.PreparedStatement(sql);
2.设置参数值
PreparedStatement对象:Setxxx(参数1,参数2):给?赋值
Xxx:数据类型;如SetInt(参数一,参数二)
参数:
.参数1:?的位置编号,从一开始
.参数2:?的值
3.执行SQL
(不需要在传递sql)
ResultSet rs = pstmt.executeQuery();
/**
* PreparedStatement
* @throws Exception
*/
@Test //单元测试,节省时间效率
public void testPreparedStatement() throws Exception{
//1.注册驱动-->注释掉也是没错
//Class.forName("com.mysql.jdbc.Driver");
//获取链接
//useSSL=false-->解决控制台上出现的ssl警告问题
String url ="jdbc:mysql://127.0.0.1:3306/db1?useSSL=false";
String username ="root";
String password ="";
Connection conn = DriverManager.getConnection(url,username,password);
//将接收到的用户名和密码,添加进sql语句
String sql="select * from user where username=? and password = ?; ";
//获取PreparedStatement对象(需要传入sql的值)
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"zhangsan");
pstmt.setString(2,"123456");
//执行SQL语句
ResultSet rs = pstmt.executeQuery();
//验证返回值是否正确,并给于一定的操作
if(rs.next()) {
System.out.println("登录成功");
}else {
System.out.println("登录失败");
}
//7.释放资源
pstmt.close();
conn.close();
rs.close();
}