今天在往數據庫中插入數據時遇到了線程阻塞問題:
代碼是這樣的,使用批處理最優時間的方式,向數據庫中插入多條數據:
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語句做完之後都需要提交一下,之前都沒有什麼太大的體會.
commit;一下
數據正常插入了:
終於解決了..........