Preparedstatement和statement的区别使用方式详细解释

Preparedstatement和statement的区别

理论讲解:

用Prepared statement进行开发。
Prepared statement是预编译的,而statement不是,在每次执行sql语句的增删改时,如果是一条数据两者没差距,但如果数据量大于1,那么每次执行sql语句statement都要重新编译一次,
而Prepared statement不用,Prepared statement的运行效率大于statement;
从代码的可维护性和可读性来说,虽然用Prepared statement来代替statement会使代码多出几行,但这样的代码无论从可读性还是可维护性来说,都比直接使用statement的代码高很多档次;
最重要的一点,从安全角度来说,使用Prepared statement可以大大提高程序的安全性,因为Prepared statement是用‘?’传参,可以防止sql注入,具有安全性,而statement用的是‘+’字符串拼接,安全性较低。
 
代码区别:

PreparedStatement使用 “?” 代替参数成为占位符(通俗得讲)

 举例说明:

jdbc连接数据库:插入数据(首先我自己提取的一个工具类 JdbcUtils 简化SQL,减少连接次数)上代码

Statement:
 1 package jdbc.TestDemo;
 2 
 3 import jdbc.utils.JdbcUtils;
 4 
 5 import java.sql.Connection;
 6 import java.sql.ResultSet;
 7 import java.sql.SQLException;
 8 import java.sql.Statement;
 9 
10 public class TestInsert {
11     public static void main(String[] args) {
12         Connection connection = null;
13         Statement statement = null;
14         ResultSet resultSet = null;
15         try {
16             connection = JdbcUtils.getConnection();  //获取数据库连接
17             statement = connection.createStatement();
18             String sql = "insert into user (`id`,`username`,`password`) values ('3','王青','123456')";
19             int i = statement.executeUpdate(sql);
20             if(i>0){
21                 System.out.println("插入数据成功");
22             }
23         } catch (SQLException e) {
24             e.printStackTrace();
25         }finally {
26              JdbcUtils.release(connection,statement,resultSet);
27         }
28     }
29 }

结果:

 

 

PreparedStatement:
 1 package jdbc.TestDemo;
 2 
 3 import jdbc.utils.JdbcUtils;
 4 
 5 import java.sql.Connection;
 6 import java.sql.PreparedStatement;
 7 import java.sql.ResultSet;
 8 import java.sql.SQLException;
 9 
10 public class TestInsertP {
11     public static void main(String[] args) {
12         Connection connection =null;
13         PreparedStatement ps = null;
14         ResultSet resultSet = null;
15         try {
16              connection = JdbcUtils.getConnection();
17              String sql = "insert into user (`id`,`username`,`password`) values(?,?,?)";
18              ps = connection.prepareStatement(sql);  //预编译SQL,先写sql 然后不执行
19             ps.setInt(1,4);
20             ps.setString(2,"王芳");
21             ps.setString(3,"12222");
22 
23             int i = ps.executeUpdate();
24             if(i>0){
25                 System.out.println("插入成功");
26             }
27         } catch (SQLException e) {
28             e.printStackTrace();
29         }finally {
30             JdbcUtils.release(connection,ps,null);
31         }
32     }
33 }

结果:

 

posted @ 2021-02-08 20:53  贩卖人烟  阅读(538)  评论(0编辑  收藏  举报