// 獲取要設置的Arp基準的List後,插入Arp基準表中 public boolean insertArpStandardList(List<ArpTable> list) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; //MySql的JDBC鏈接的url中要加rewriteBatchedStatements參數,並保證5.1.13以上版本的驅動,才能實現高性能的批量插入。 //優化插入性能,用JDBC的addBatch方法,可是注意在鏈接字符串加上面寫的參數。 //例如: String connectionUrl="jdbc:mysql://192.168.1.100:3306/test?rewriteBatchedStatements=true" ; String sql = "insert into arp_standard(guid, devicebrand, devicename, deviceip, ipaddress, " + "macaddress, createtime) values(?,?,?,?,?,?,?)"; try{ conn = DBConnection.getConnection(); ps = conn.prepareStatement(sql); //優化插入第一步 設置手動提交 conn.setAutoCommit(false); int len = list.size(); for(int i=0; i<len; i++) { ps.setString(1, list.get(i).getGuid()); ps.setString(2, list.get(i).getDeviceBrand()); ps.setString(3, list.get(i).getDeviceName()); ps.setString(4, list.get(i).getDeviceIp()); ps.setString(5, list.get(i).getIpAddress()); ps.setString(6, list.get(i).getMacAddress()); ps.setString(7, list.get(i).getCreateTime()); //if(ps.executeUpdate() != 1) r = false; 優化後,不用傳統的插入方法了。 //優化插入第二步 插入代碼打包,等必定量後再一塊兒插入。 ps.addBatch(); //if(ps.executeUpdate() != 1)result = false; //每200次提交一次 if((i!=0 && i%200==0) || i==len-1){//能夠設置不一樣的大小;如50,100,200,500,1000等等 ps.executeBatch(); //優化插入第三步 提交,批量插入數據庫中。 conn.commit(); ps.clearBatch(); //提交後,Batch清空。 } } } catch (Exception e) { System.out.println("MibTaskPack->getArpInfoList() error:" + e.getMessage()); return false; //出錯才報false } finally { DBConnection.closeConection(conn, ps, rs); } return true; }
效率要比一條一條插入快近60倍。好比for循環或者insert into table test select * from....mysql