public void runSp(List<String> params, DataSource dataSource, String spName) throws SQLException { StringBuffer sb = new StringBuffer("{call " + spName + " ("); for (int i = 0; i < params.size() - 1; i++) { sb.append("?,"); } sb.append("?)}"); String callString = sb.toString(); LOGGER.info("[runSp] Running statement: " + callString); Connection conn = getConnection(dataSource); conn.setAutoCommit(false); CallableStatement cs = conn.prepareCall(callString); for (int i = 0; i < params.size(); i++) { cs.setString(i + 1, params.get(i)); } try { cs.execute(); conn.commit(); LOGGER.info("sp completed successfully"); } catch (Exception e) { LOGGER.info("sp failed", e); conn.rollback(); } finally { cs.close(); conn.close(); } }
程序運行過程中調用該方法時拋出這個異常。程序需要在運行過程中調用sql Server 的存儲過程,但是存儲過中已經有了事物的提交。
我在java code中同樣添加了java code就拋出了這個一場。在我嘗試去掉java code中的事物控制以後,錯誤果然沒有。具體原因尚在學習過程中,希望不吝賜教。