错误笔记:JDBC向oracle数据库中插入数据遇到线程阻塞问题
2017-11-22 19:38
447 查看
今天在往数据库中插入数据时遇到了线程阻塞问题:
代码是这样的,使用批处理最优时间的方式,向数据库中插入多条数据:
public class TransTest {
private String driver = "oracle.jdbc.OracleDriver";
private String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
private String user = name;
private String pass = password;
Connection conn = null;
Statement st = null;
PreparedStatement prs = null;
public static void main(String[] args) throws SQLException {
TransTest test = new TransTest();
test.test4();
}
/*1.事物自己管理
*2.使用批处理
*3.使用PreparedStatement
*
* */
public void test4() {
try {
int num=0;
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pass);
conn.setAutoCommit(false);// 是否自动提交事务
String sql = "insert into student(id,name) values(?,?)";
prs = conn.prepareStatement(sql);
long time = System.currentTimeMillis();
for(int i=0;i<10000;i++) {
num++;
prs.setLong(1, i);
prs.setString(2, "tom"+i);
prs.addBatch();
//最佳值时多少
if(num%1500==0) {
prs.executeBatch();
}
}
prs.executeBatch();
conn.commit();
long end = System.currentTimeMillis();
System.out.println(end-time);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
为什么会出现这样的问题呢?
试过各种方法都行不通后忽然想到我之前因为怕student表中有没有删除的数据会导致id重复的问题删除过一次表中数据
没有提交......这就很尴尬啊,DML语句做完
4000
之后都需要提交一下,之前都没有什么太大的体会.
commit;一下
数据正常插入了:
终于解决了..........
代码是这样的,使用批处理最优时间的方式,向数据库中插入多条数据:
public class TransTest {
private String driver = "oracle.jdbc.OracleDriver";
private String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
private String user = name;
private String pass = password;
Connection conn = null;
Statement st = null;
PreparedStatement prs = null;
public static void main(String[] args) throws SQLException {
TransTest test = new TransTest();
test.test4();
}
/*1.事物自己管理
*2.使用批处理
*3.使用PreparedStatement
*
* */
public void test4() {
try {
int num=0;
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pass);
conn.setAutoCommit(false);// 是否自动提交事务
String sql = "insert into student(id,name) values(?,?)";
prs = conn.prepareStatement(sql);
long time = System.currentTimeMillis();
for(int i=0;i<10000;i++) {
num++;
prs.setLong(1, i);
prs.setString(2, "tom"+i);
prs.addBatch();
//最佳值时多少
if(num%1500==0) {
prs.executeBatch();
}
}
prs.executeBatch();
conn.commit();
long end = System.currentTimeMillis();
System.out.println(end-time);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
为什么会出现这样的问题呢?
试过各种方法都行不通后忽然想到我之前因为怕student表中有没有删除的数据会导致id重复的问题删除过一次表中数据
没有提交......这就很尴尬啊,DML语句做完
4000
之后都需要提交一下,之前都没有什么太大的体会.
commit;一下
数据正常插入了:
终于解决了..........
相关文章推荐
- Struts+DAO的向oracle数据库插入数据的实现代码及遇到的问题(已解决)
- Python将数据插入到数据库时遇到单引号插入错误的问题
- WIN7下.Net开发遇到的又一问题:HTTP 错误 500.19 - Internal Server Error,无法访问请求的页面,因为该页的相关配置数据无效。
- IMP-00003: 遇到 ORACLE 错误 20001,导数据出现问题
- c#向Oracle数据库中插入数据, 出现乱码问题, oracle11g(版本11.2)
- 用SqlBulkCopy批量插入数据 遇到的错误
- 用SqlBulkCopy批量插入数据 遇到的错误
- WIN7下.Net开发遇到的又一问题:HTTP 错误 500.19 - Internal Server Error,无法访问请求的页面,因为该页的相关配置数据无效。
- PHP PDOStatement:bindParam插入数据错误问题分析
- 遇到的问题-----------perl脚本用handlersocket把数据插入mysql执行时报错lock_tables
- PHP PDOStatement:bindParam插入数据错误问题分析
- 遇到的问题---------mysql插入数据时MySQL server has gone away
- JDBC用ResultSet访问大量数据时会遇到的问题
- jdbc的连接问题-----java数据学习笔记之2
- 今天遇到Mysql 插入数据里有中文字符出现 Incorrect string value 的错误
- [VB.NET]老问题,插入数据并发错误?
- JDBC连接数据库遇到的问题(小白的错误)
- php oci8.dll 插入数据到oracle数据库 php操作oracle数据库 亲测 ORA-00911 无效字符错误解决方法
- Oracle IMP-00003: 遇到 ORACLE 错误 20001,导数据出现问题
- PHP PDOStatement:bindParam插入数据错误问题分析