今儿写和数据导入脚本,为了防止插入重复数据,便在插入前去数据库查一下,每批插入共用一个连接对象,结果大量重复查询,就造成了这个错误。
另外据网上博文,批量或大量更新、插入不去close也会报重复错误。。。
代码如下:
private static void doInsertList(List<Company> companyList) throws Exception {
//每批插入共用一个数据库连接
Connection insertConn = getConnection();
//每批查询共用一个数据库连接
Connection searchConn = getConnection();
PreparedStatement pstmt = insertConn.prepareStatement("insert into T_COMPANY (TITLE, UNIFORMCODE, REGISTEREDCAPITAL, PROVINCE, CITY, PID, UPDATERATE, ISENABLE,REGISTEREDDATE) values (?, ?, ?, ?, ?, ?, ?, ?, ?)");
pstmt.clearBatch();
for (int i = 0; i < companyList.size(); i ++) {
if (exitName(companyList.get(i).TITLE,companyList.get(i).UNIFORMCODE,searchConn)){
continue;
}
}
}
查询方法
public static boolean exitName(String name,String UNIFORMCODE,Connection conn) throws Exception{
String sql = "SELECT * FROM t_company where TITLE = '"+ name +"' or UNIFORMCODE = '"+ UNIFORMCODE +"'";
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(sql);
ResultSet resultSet = pstmt.executeQuery();//将查询的结果放入ResultSet结果集中
if (resultSet.next()) {
//resultSet.close();
//pstmt.close();
return true;
}
//resultSet.close();
//pstmt.close();
} catch (SQLException e) {
System.out.println("操作失败o(╥﹏╥");
e.printStackTrace();
}
return false;
}
由于查询后没有关闭resultSet,PreparedStatement,就报了以下错误。