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

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

错误笔记:JDBC向oracle数据库中插入数据遇到线程阻塞问题_第1张图片

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

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重复的问题删除过一次表中数据错误笔记:JDBC向oracle数据库中插入数据遇到线程阻塞问题_第2张图片

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

commit;一下

数据正常插入了:错误笔记:JDBC向oracle数据库中插入数据遇到线程阻塞问题_第3张图片

终于解决了..........

你可能感兴趣的:(错误笔记)