解决用户使用sql语句注入攻击数据库
用statement 接口的子类
java.sql.PrepareStatement Extends Statement 接口 表示预编译的SQL语句
如何使用PrepareStatement对象
1. 获取conn.PrepareStatement (String sql)
sql语句可以使用占位符 ?
2. 设置占位符的实际数据
3. 执行sql语句
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
public class jdbc03pre {
/*
解决用户使用sql语句注入攻击数据库
用statement 接口的子类
java.sql.PrepareStatement Extends Statement 接口 表示预编译的SQL语句
如何使用PrepareStatement对象
1. 获取conn.PrepareStatement (String sql)
sql语句可以使用占位符 ?
2. 设置占位符的实际数据
3. 执行sql语句
*/
public static void main(String[] args) throws SQLException {
//1 使用scanner获得用户名和用户密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String pname = sc.nextLine();
System.out.println("请输入密码");
String pasword = sc.nextLine();
//2. 使用jdbc操作数据库
//获取连接对象
Connection conn = JdbcUntil.getConnection();
//获得执行对象
String sql="SELECT * FROM users WHERE pname=? AND pasword=?;";
//3. 获取预编译执行对象 并传入sql语句
PreparedStatement pst = conn.prepareStatement(sql);
// 给占位符赋值 使用给定对象设置指定参数的值 setObject
pst.setObject(1,pname);
pst.setObject(2,pasword);
//4.执行sql语句 获取结果
//int executeUpdate() insrt update delete
// ResultSet excuteQuery; select
ResultSet i = pst.executeQuery();
//5. 处理结果
if (i.next()){
//有结果
System.out.println("登录成功---》"+i.getString("pname")+i.getString("pasword"));
}else {
System.out.println("没有结果");
}
//释放资源
JdbcUntil.close(i,pst,conn);
}
}