我的Web应用程序中有一个网格,使用jQuery API可直接从Web服务获取数据。要求是
要实现此目的,我使用了JDBC保存点并将其保存在堆栈中,该堆栈允许撤消操作。我要在更新语句之前设置一个保存点,在撤消上,我希望它回滚到最后一个保存点,提交很简单。
我首先在桌面应用程序上对其进行了测试,并且效果很好,但是在基于Web的应用程序中,它无法正常工作。
数据库连接类
private static Map<String, Connection> userConnections;
public static Connection getConnection(configsJson) {
... //getdata from json
if (userConnections == null) {
userConnections = new HashMap<>();
} else {
userConnection = userConnections.get(userKey);
}
if (userConnection == null) {
userConnection = DriverManager.getConnection("jdbc:oracle:thin:@" + sourceIP + ":" + sourcePort + ":" + sourceInstance, sourceUser, sourcePass);
userConnection.setAutoCommit(false);
userConnections.put(userKey, userConnection);
}
return userConnection;
}
我的更新功能
private static Map<String, Stack<Savepoint>> userSavePoints = new HashMap<>();
@ResponseBody
@RequestMapping(value = "/webservice/updateRecord", method = RequestMethod.POST)
public int updateRecord(HttpServletRequest request, @RequestParam String configs) throws SQLException, JSONException, ParseException {
Connection con = DBService.getConnection(configJson);
...
userSavePoints.get(userKey).push(con.setSavepoint());
return statement.executeUpdate(sql);
}
如果这里没有savepoint语句,那么更新后我可以在我的网页上看到更改的记录,因为自动提交设置为false,所以这些记录尚未保存在数据库中。问题在于此保存点语句,网格不显示更改的记录。在我看来,似乎记录没有更新,或者它们自动回滚到该保存点。
我的逻辑有问题吗?还是这些保存点不适用于宁静的api?
答案 0 :(得分:0)
我什至没有发现一个愚蠢的错误,该行返回null并且没有继续进行。控制台也没有显示任何异常。
userSavePoints.get(userKey)
我只需要初始化它即可解决我的问题。