请问大家,这是一个程序的片段:
private void startExport() throws Exception {
// 得到所有已经完成录入的XML文件名列表
Vector v = LocalImage.getUpLoadToRemoteDBList(FETCHNUM);
int success = 0;
UploadServiceServer.getLogger().debug("需要上传数据共有" + v.size() + "个"); try {
for (int i = 0; i < v.size(); i++) {
LocalImage localImage = (LocalImage) v.get(i);
int retNo = export2DB(localImage);// 倒入到远程数据库中 是DB2数据库
//TODO magic number,需要优化 陈耀辉
if(retNo==1){
localImage.completeUpload("3", "4");// 更新本地库 是sql数据库 localimage是一个表
success++;
}
}
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
UploadServiceServer.getLogger().debug("上传数据出现错误,异常信息:" + e.getMessage());
}
System.out.println("成功上传了" + success + "个数据");
UploadServiceServer.getLogger().debug("成功上传了" + success + "个数据");
}
现在出现下面的错误:
[DEBUG] 2008-10-27 16:56:46,375 method:com.sunyard.bpo.push.UploadDataToRemoteDB.startExport(UploadDataToRemoteDB.java:146)
上传数据出现错误,异常信息:[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Transaction (Process ID 57) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
[DEBUG] 2008-10-27 16:56:46,375 method:com.sunyard.bpo.push.UploadDataToRemoteDB.startExport(UploadDataToRemoteDB.java:149)
成功上传了1个数据
请问这是sql中的localimage表被锁住啦吗,该怎么解决啊,谢谢大家啦
private void startExport() throws Exception {
// 得到所有已经完成录入的XML文件名列表
Vector v = LocalImage.getUpLoadToRemoteDBList(FETCHNUM);
int success = 0;
UploadServiceServer.getLogger().debug("需要上传数据共有" + v.size() + "个"); try {
for (int i = 0; i < v.size(); i++) {
LocalImage localImage = (LocalImage) v.get(i);
int retNo = export2DB(localImage);// 倒入到远程数据库中 是DB2数据库
//TODO magic number,需要优化 陈耀辉
if(retNo==1){
localImage.completeUpload("3", "4");// 更新本地库 是sql数据库 localimage是一个表
success++;
}
}
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
UploadServiceServer.getLogger().debug("上传数据出现错误,异常信息:" + e.getMessage());
}
System.out.println("成功上传了" + success + "个数据");
UploadServiceServer.getLogger().debug("成功上传了" + success + "个数据");
}
现在出现下面的错误:
[DEBUG] 2008-10-27 16:56:46,375 method:com.sunyard.bpo.push.UploadDataToRemoteDB.startExport(UploadDataToRemoteDB.java:146)
上传数据出现错误,异常信息:[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]Transaction (Process ID 57) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
[DEBUG] 2008-10-27 16:56:46,375 method:com.sunyard.bpo.push.UploadDataToRemoteDB.startExport(UploadDataToRemoteDB.java:149)
成功上传了1个数据
请问这是sql中的localimage表被锁住啦吗,该怎么解决啊,谢谢大家啦
DBConnection dbCon = null;//注释:保全可能要加上NOTE1.
int updateNo = 0;
try { dbCon = DBUtil.createLocalDBConnection(); // 查询
String sSQL = " update LocalImage set STATE='" + afterState + "',UPLOADTIME = GETDATE() where BATCHCODE ='"
+ BATCHCODE
+ "' and PLCYNUM ='"
+ PLCYNUM
+ "' and STATE='" + beforeState + "'";
Statement statement = dbCon.createStatement();
updateNo = statement.executeUpdate(sSQL);
statement.close();
if(updateNo!=1){
throw new Exception("更新本地库失败!批次号:" + BATCHCODE + ",保单号:" + PLCYNUM);
}
} catch (Exception e) {
throw e;
} finally {
DBUtil.removeConnection();
}}
这就是上面方法的代码
估计是你的这个方法有问题,只是关闭连接,但是没有标示是关闭哪一个连接。
比如两个操作数据库的方法,分别打开了连接1和连接2,连接1和连接2同时进行数据库操作,这个时候连接2先结束了,调用方法关闭连接,由于没有指定是哪个连接,可能会把连接1给关掉了。但是这个时候方法1还需要连接进行操作,这个时候就没法正常提交就会报错了。