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 }
结果: