java mysql statement_java-mysql(2) Prepared statement

上一篇学习了java如何链接配置mysql,这篇学习下java如何处理sql预处理语句(PreparedStatement),首先是一个sql预处理的例子:

1 packagecore;2

3 importjava.sql.Connection;4 importjava.sql.DriverManager;5 importjava.sql.PreparedStatement;6 importjava.sql.SQLException;7 importjava.sql.Statement;8 importjava.sql.ResultSet;9

10 public classMethodReferencesTest {11

12 public static void main(String[] args) throwsCloneNotSupportedException {13 //TODO Auto-generated method stub

14 Connection connection = null;15 Statement statement = null;16 ResultSet resultSet = null;17 String sqlurl = "jdbc:mysql://172.20.23.75:3306/testdb";18 String sqluser = "root";19 String sqlpassword = "123456";20 long starttime=System.currentTimeMillis();21 try{22 connection =DriverManager.getConnection(sqlurl, sqluser,23 sqlpassword);24 PreparedStatement prestatement = connection.prepareStatement("INSERT INTO Testing(Id) VALUES(?)");25 prestatement.setInt(1, 1001);26 prestatement.executeUpdate();27 } catch(SQLException e) {28 //TODO Auto-generated catch block

29 e.printStackTrace();30 } finally{31 try{32 if (resultSet != null) {33 resultSet.close();34 }35 if (statement != null) {36 statement.close();37 }38 if (connection != null) {39 connection.close();40 }41 } catch(SQLException e) {42 e.printStackTrace();43 }44 }45 System.out.println(System.currentTimeMillis()-starttime);46

47 }48

49 }

首先说一下prepared statement的好处。

1.因为parepared statement 相当与编译好的sql语句模板,所以当你需要运行大量结构相同但只是参数不同的sql语句时候,数据库只需要分析编译一次sql语句即可,其他的都只是参数的替换。这样可以大大提高系统运行效率。2.因为prepared statement的一开始用占位符来替换sql语句里面的具体参数,这样就坐到了sql语句的参数化,可以避免sql inject的情况出现。

当创建好prepared statement之后,我们就可以设置参数.

prestatement.setInt(1, 1001);

然后执行sql语句

prestatement.executeUpdate();

ps:这里面用executeupdate是因为我们不需要获取返回的结果,所以executeUpdate可以用到我们Create,delete,insert,update的时候。

那么prepared statement到底可以提高多少运行时间呢?可以用两个例子来比较一下:

1.老老实实用executequery

connection =DriverManager.getConnection(sqlurl, sqluser,

sqlpassword);

statement=connection.createStatement();for (int i = 1; i <= 1000; i++) {

String query= "INSERT INTO Testing(Id) VALUES(" + 2 * i + ")";

statement.executeUpdate(query);

}

//耗时 5511MS

2.用prepared statement

connection =DriverManager.getConnection(sqlurl, sqluser,

sqlpassword);

PreparedStatement prestatement= connection.prepareStatement("INSERT INTO Testing(Id) VALUES(?)");for(int i=1;i<1000;i++)

{

prestatement.setInt(1,i*2);

prestatement.executeUpdate();

}

//耗时:4123ms

所以说prepared statement还是能提升不少运行效率的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值