错误笔记:JDBC向oracle数据库中插入数据遇到线程阻塞问题

来源:互联网 发布:重庆时时计划软件 编辑:程序博客网 时间:2024/06/06 05:56

今天在往数据库中插入数据时遇到了线程阻塞问题:

代码是这样的,使用批处理最优时间的方式,向数据库中插入多条数据:

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 blocke.printStackTrace();}}}
为什么会出现这样的问题呢?

试过各种方法都行不通后忽然想到我之前因为怕student表中有没有删除的数据会导致id重复的问题删除过一次表中数据

没有提交......这就很尴尬啊,DML语句做完之后都需要提交一下,之前都没有什么太大的体会. 

commit;一下

数据正常插入了:

终于解决了..........惊恐

阅读全文
0 0
原创粉丝点击