本次博客带领大家学习JDBC中的预处理 PreparedStatement 的查询和DML的使用和JDBC API。
预处理 PreparedStatement的基本介绍
- PreparedStatement 对象执行的SQL语句中的参数用问号(?)来表示,调用PreparedStatement 对象的 setXXX()方法来设置这些参数,setXXX()方法有两个参数,第一个参数是要设置的SQL语句中的参数的索引(从1开始),第二个是设置的SQL语句中的参数的值。
- 调用 executeQuery(),返回 ResultSet对象。
- 调用 executeUpdate(),执行更新,包括增、删、修改。
预处理 PreparedStatement的好处
- 不再使用 + 拼接sql语句,减少语法错误。
- 有效的解决了sql注入问题!
- 大大减少了编译次数,效率较高。
预处理查询操作
- 预处理查询可以有效的解决了sql注入问题。
public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入管理员的名字:");
String admin_name =scanner.nextLine();
System.out.println("请输入管理员的密码");
String admin_pwd=scanner.nextLine();
Properties properties = new Properties();
properties.load(new FileInputStream("src\\mysql.properites"));
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
// 得到PrepareStatement
//组织SQL,sql 语句的? 就相当于占位符
String sql = "select name,pwd from admin where name =? and pwd =?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 给?赋值
preparedStatement.setString(1,admin_name);
preparedStatement.setString(2,admin_pwd);
ResultSet resultSet = preparedStatement.executeQuery();
if(resultSet.next()){
System.out.println("恭喜登录成功!");
}else{
System.out.println("对不起,登陆失败");
}
resultSet.close();
preparedStatement.close();
connection.close();
}
预处理的DML操作
public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入添加的名字");
String admin_name =scanner.nextLine();
System.out.println("请输入添加的密码");
String admin_pwd=scanner.nextLine();
Properties properties = new Properties();
properties.load(new FileInputStream("src\\mysql.properites"));
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
// 得到PrepareStatement
//组织SQL,sql 语句的? 就相当于占位符
//添加记录
String sql = "insert into admin VALUES(?,?)";
//修改记录
String sql = "UPDATE admin set pwd=? where name=?";
//删除记录
String sql = "DELETE from admin where name = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 给?赋值
preparedStatement.setString(1,admin_name);
int row = preparedStatement.executeUpdate();
if(row > 0){
System.out.println("修改成功!");
}else{
System.out.println("修改失败!");
}
preparedStatement.close();
connection.close();
}