-
jdbc PreparedStatement executeBatch方法执行效率低的问题10
我知道PreparedStatement可以一次执行多条sql语句。通过addBatch方法添加sql,最后执行。
我的代码如下(就是一个循环,每次添加一条sql,最后执行。但是不知为什么,很耗时):public void writeToDB(ArrayList<Item> wordList) { int i = 0, size = 0; Item item = null; Connection conn = null; PreparedStatement pStmt = null; String sql = "insert into t_item(word,trans,phonetic,difficulty) values(?,?,?,?)"; size = wordList.size(); conn = DB.getConn(); pStmt = DB.getpStmt(conn, sql); for(i=0;i<size;i++) { item = (Item) wordList.get(i); try { pStmt.setString(1, item.getWord()); pStmt.setString(2, item.getTrans()); pStmt.setString(3, item.getPhonetic()); pStmt.setInt(4, item.getDifficulty()); pStmt.addBatch(); } catch (SQLException e) { e.printStackTrace(); continue; } } try { pStmt.executeBatch(); } catch (SQLException e) { e.printStackTrace(); } }
wordList里一共有800多个条目
我用ystem.currentTimeMillis()方法测得 for循环体执行时间大概是25毫秒,但是pStmt.executeBatch()这一条语句要22841毫秒!!!应该一共只有800多个sql语句啊。。。不知道为什么会用这么长时间。。。
个位大侠,有什么解决方案吗?是我的代码有问题,还是现实就是这么残酷?。。。
除了写存储过程,还有其他办法吗?
学习中,多谢!
问题补充:pacer123 写道for(i=0;i<size;i++)
{
item = (Item) wordList.get(i);
try {
pStmt.setString(1, item.getWord());
pStmt.setString(2, item.getTrans());
pStmt.setString(3, item.getPhonetic());
pStmt.setInt(4, item.getDifficulty());
pStmt.addBatch();
//增加如下2行代码试试
if(i%200==0)
{pStmt.executeBatch(); }
} catch (SQLException e) {
e.printStackTrace();
continue;
}
}
谢谢啊,已经解决了~
问题是事务提交没有设成手动的,导致每执行一次sql语句,就会提交一次事务,时间都浪费在这里了。
应该
conn.setAutoCommit(false);
......
conn.commit();2011年6月17日 08:20
1个答案 按时间排序 按投票排序
-
for(i=0;i<size;i++)
{
item = (Item) wordList.get(i);
try {
pStmt.setString(1, item.getWord());
pStmt.setString(2, item.getTrans());
pStmt.setString(3, item.getPhonetic());
pStmt.setInt(4, item.getDifficulty());
pStmt.addBatch();
//增加如下2行代码试试
if(i%200==0)
{pStmt.executeBatch(); }
} catch (SQLException e) {
e.printStackTrace();
continue;
}
}2011年6月20日 11:51
相关推荐
NULL 博文链接:https://singleant.iteye.com/blog/1298837
JDBC基础教程之PreparedStatement.doc )
jdbc中preparedStatement比Statement的好处
JDBC中PreparedStatement接口提供的execute、executeQuery和executeUpdate之间的区别及用法
jdbc2.0版 PreparedStatement接口的用法
NULL 博文链接:https://huiminchen.iteye.com/blog/1097332
Java面试题34.jdbc中preparedStatement比Statement的好处.mp4
尚硅谷著名教师佟刚老师基于面对对象编程思想,对preparedStatement类一系列操作的案例。
我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的...
Java之JDBC连接数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement) 配置文件 db.properties(保存数据库账号和密码等) 工具类 JDBCUtil.java(抽取公共部分,解决硬...
Java-JDBC【之】JDBC概述、获取连接、SQL注入问题与解决、查询解析 1.JDBC概述 2.操作流程 1.初始化项目,导入`驱动jar包` 2.加载驱动类 3.创建数据库连接对象`Connection` 4.创建`Statement` (此处存在SQL注入问题)...
关于PreparedStatement插入Date类型值的方法.txt
在java中向访问数据库的sql语句一般放到类PreparedStatement类构造函数中,这里遇到的问题就是向sql语句中用setDate()插入时间时不能用java.util.date,而应用java.sql.date,这里就讲述了解决方法,一种是插入...
9.2.2 使用PreparedStatement执行insert操作 ; 9.2.2 使用PreparedStatement执行insert操作 ; 9.2.2 使用PreparedStatement执行insert操作 ;9.2.3 学生实践练习;9.2.3 学生实践练习;9.3 数据库操作封装类...
1、JDBC(Java Database Connection):java连接数据库统一接口API,底层主要通过直接的JDBC驱动和 JDBC-ODBC桥驱动实现与数据库的连接。 1>.JDBC驱动程序类型: <1>.JDBC-ODBC桥加ODBC驱动程序:需要ODBC驱动,适合...
2.SQL注入问题 3.PreparedStatement类 3.1.PreparedStatement和Statement的对比(面试题) 3.2.PreparedStatement和Statement的关系 3.3.小结 4.使用PreparedStatement完成登录 6.PreparedStatement...
内容为JDBC增删改查 ,事物处理, 批处理,以及预编译示例代码
主要介绍了详解Java的JDBC中Statement与PreparedStatement对象,PreparedStatement一般来说比使用Statement效率更高,需要的朋友可以参考下
java.sql.PreparedStatement 继承Statement接口,表示预编译的SQL语句的对象,SQL语句被预编译并且存储在PreparedStatement对象中。然后可以使用此对象高效地多次执行该语句。 java.sql.CallableStatement 用来...
此实例意在解决预处理命令PreparedStatement的setString()方法,在sql2008数据库中写入数据时,会自动补足空格的问题, 同时此实例也解决了当存在自动补足空格的问题时,使用nvarchar可以使查找出来的数据与原输入...