【发布时间】:2015-03-09 16:16:25
【问题描述】:
下面是我的 Java 程序。我正在调用一个 PLSQL 过程来更新员工姓名。我关闭了 PLSQL 代码中的提交,以便我可以从 Java 代码中进行提交和回滚。但即使在我关闭自动提交并进行显式回滚之后,表格中的详细信息仍然会更新。 如何?我不知道,请帮忙。
这是我的 Java 代码。在 PLSQL 中,它只是读取值并执行更新语句。没有提交。
public class TestCommit {
public static void main(String[] args) throws SQLException, IOException {
CallableStatement callableStatement = null;
Connection conn = null;
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager
.getConnection("jdbc:oracle:thin:testuser/testpwd@//testdb:1521/testbx");
conn.setAutoCommit(false);
String sql = "{call testpkg.saveemployee(?,?)}";
callableStatement = conn.prepareCall(sql);
callableStatement.setString("name", "spider");
callableStatement.setString("id", "A101");
callableStatement.executeQuery();
conn.rollback();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
// Close the statement
callableStatement.close();
// Close the connection
conn.close();
}
}
}
编辑:PLSQL
CREATE OR REPLACE PROCEDURE saveemployee(
name IN employee.ename%TYPE,
id IN employee.eid%TYPE)
IS
BEGIN
UPDATE employee SET ename = name WHERE eid = id;
END;
【问题讨论】:
-
向我们展示存储过程
-
尝试在您的
getConnection调用之前添加此代码和平(使用适当的 try/catch 块)Class.forName('oracle.jdbc.driver.OracleDriver'); -
您使用的是哪个版本的 JDBC 驱动程序?您的代码看起来确实正确。
-
我在连接之前添加了该行,它可以工作。我删除了它,现在仍然可以使用。我假设 PLSQL 主体在我拍摄快照之前可能已经改变。我将与数据库人员确认并在此处更新以避免歧义。
-
我投票赞成关闭,因为就目前而言,这个问题不会帮助任何搜索自动提交或 JDBC 问题的人......我想投票赞成删除“错误的想法”,但没有找到选项