在下面的代码中,如果条件失败,即当达到else块时,过程成功运行,否则抛出Closed Statement Exception:
public synchronized void create(Map formMap) throws SQLException, Exception
{
CallableStatement callStmt=null;
try
{
String sql= "BEGIN UP_I_51(?, ?, ?, ?, ?, ?, ?, ?, ?); END;";
callStmt=getConnection().prepareCall(sql);
callStmt.setString(1,formMap.get("periodFrom").toString());
callStmt.setString(2, formMap.get("periodTo").toString());
String srcType=formMap.get("srcType").toString();
callStmt.setString(3, srcType);
callStmt.setString(4, formMap.get("collabIdMod").toString());
callStmt.setString(5, formMap.get("name").toString());
callStmt.setString(6, formMap.get("address").toString());
callStmt.setString(7, " ");
String parCollabId=formMap.get("pCollabId").toString();
if(StringUtils.exists(parCollabId))
{
callStmt.setString(8, parCollabId);
String parSrcType=getParentSrcType(srcType);
callStmt.setString(9, parSrcType);
}
else
{
callStmt.setString(8, " ");
callStmt.setString(9, " ");
}
callStmt.executeUpdate();
}
finally
{
callStmt.close();
}
}
我用下面的代码替换了代码,它现在正在运行。我之前在设置字符串时使用了条件,但现在不知道为什么会出现异常。
我仍然不明白为什么会出现此异常。有谁能找到它?
public synchronized void create(Map formMap) throws SQLException, Exception
{
CallableStatement callStmt=null;
String srcType=formMap.get("srcType").toString();
String parCollabId=formMap.get("pCollabId").toString();
String parSrcType=getParentSrcType(srcType);
try
{
srcType=formMap.get("srcType").toString();
parCollabId=formMap.get("pCollabId").toString();
parSrcType=getParentSrcType(srcType);
parCollabId = StringUtils.exists(parCollabId) ? parCollabId : " ";
parSrcType = StringUtils.exists(parCollabId) ? parSrcType : " ";
String sql= "{ call UP_I_51(?, ?, ?, ?, ?, ?, ?, ?, ?) }";
callStmt=getConnection().prepareCall(sql);
callStmt.setString(1,formMap.get("periodFrom").toString());
callStmt.setString(2, formMap.get("periodTo").toString());
callStmt.setString(3, srcType);
callStmt.setString(4, formMap.get("collabIdMod").toString());
callStmt.setString(5, formMap.get("name").toString());
callStmt.setString(6, formMap.get("address").toString());
callStmt.setString(7, " ");
callStmt.setString(8, parCollabId);
callStmt.setString(9, parSrcType);
callStmt.executeUpdate();
}catch(Exception e)
{
e.printStackTrace();
throw e;
}
finally
{
callStmt.close();
}
}
答案 0 :(得分:0)
有很多缺失,很难说你是如何使用它的,但是,如果你关闭连接,那么getConnection()
会返回一些未打开的东西,这可能是你的问题。
您应该编写单元测试,并在同一测试中连续两次或三次调用,以确保它正常工作。
如果不是,您可能希望getConnection()
确保在返回连接之前连接已打开。