ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

addBatch使用方法

2019-06-22 14:43:02  阅读:241  来源: 互联网

标签:语句 name tb setString addBatch 编译 statement 使用 方法


1. 建立链接 

Connection connection =getConnection();

2. 去掉自动提交功能 Commit

connection.setAutoCommit(false);

3. 预编译SQL语句,只编译一回哦,效率高啊。

PreparedStatement statement = connection.prepareStatement("INSERT INTO TABLEX VALUES(?, ?)");

4. 注备语句

复制代码
//记录1
statement.setInt(1, 1); 
statement.setString(2, "Cujo"); 
statement.addBatch(); 
//记录2
statement.setInt(1, 2); 
statement.setString(2, "Fred"); 
statement.addBatch(); 
//记录3
statement.setInt(1, 3); 
statement.setString(2, "Mark"); 
statement.addBatch(); 
复制代码

5. 批量执行上面3条语句

int [] counts = statement.executeBatch(); 
//Commit it 咽下去,到肚子(DB)里面
connection.commit();

二、使用PreparedStatement的好处:

1、代码的可读性和可维护性:

虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说,都比直接用Statement的代码高很多档次:

复制代码
--第一种方法
stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");//stmt是Statement对象实例 ------------------------------------------------------------------------- --第二种方法
perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)"); perstmt.setString(1,var1); perstmt.setString(2,var2); perstmt.setString(3,var3); perstmt.setString(4,var4); perstmt.executeUpdate(); //prestmt是 PreparedStatement 对象实例
复制代码

一看便知,对于第一种方法,别说其他人去读你的代码,就是你自己过一段时间再去读,都会觉得伤心。

2、PreparedStatement尽最大可能提高性能:

语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(这相当于一个涵数)就会得到执行。这并不是说只有一个Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配,那么在任何时候就可以不需要再次编译而可以直接执行。

而statement的语句中,即使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配。比如:

insert into tb_name (col1,col2) values ('11','22');
insert into tb_name (col1,col2) values ('11','23');

即使是相同操作但因为数据内容不一样,所以整个个语句本身不能匹配,没有缓存语句的意义。事实是没有数据库会对普通语句编译后的执行代码缓存。

(当然并不是所有的预编译语句都一定会被缓存,数据库本身会用一种策略,比如使用频度等因素来决定什么时候不再缓存已有的预编译结果,以保存有更多的空间存储新的预编译语句。)

3、最重要的一点是提高了安全性:

可能到目前为止,仍有一些人连基本的恶义SQL语法都不知道:

String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";

如果我们把[' or '1' = '1]作为varpasswd传入进来.用户名随意,看看会成为什么?

select * from tb_name = '随意' and passwd = '' or '1' = '1';

因为'1'='1'肯定成立,所以可以任何通过验证。这算比较委婉的,更有甚者把[';drop table tb_name;]作为varpasswd传入进来... 关于数据安全方面的内容这里就不做展开讨论了,总之使用PreparedStatement让执行的SQL更安全。

标签:语句,name,tb,setString,addBatch,编译,statement,使用,方法
来源: https://www.cnblogs.com/mike-JP/p/11068746.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有