gpt4 book ai didi

java - 准备语句因 DB2 SQL 错误而失败

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:17 26 4
gpt4 key购买 nike

我正在尝试执行以下代码。

public static void main(String[] args) throws Exception {
Connection connection = null;
try {
Class.forName("com.ibm.db2.jcc.DB2Driver");
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
try {
System.out.println();
connection = DriverManager.getConnection("jdbc:db2://localhost:port/database", username, password);
connection.setAutoCommit(false);
// String plsql = "BEGIN INSERT INTO t VALUES(42); COMMIT; END;";
String plsql = "BEGIN UPDATE TABLE SET PROPERTY_VALUE='test6' where property_name='TEST'; COMMIT; END;";
PreparedStatement pstatement = connection.prepareStatement(plsql);
pstatement.execute();


} catch (SQLException ex) {
ex.printStackTrace();
}
}

我收到以下错误:

com.ibm.db2.jcc.b.co: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=END;NAME='TEST'; COMMIT;;END, DRIVER=3.53.70

如何解决这个问题。为什么准备好的语句在这种情况下支持?

最佳答案

我认为您需要使用 JDBC 调用 connection.commit()提交事务。

这个article给你一个很好的例子。

您的代码将在正文中更改为如下所示

public static void main(String[] args) throws Exception {
Connection connection = null;
try {
Class.forName("com.ibm.db2.jcc.DB2Driver");
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
try {
System.out.println();
connection = DriverManager.getConnection("jdbc:db2://localhost:port/database", username, password);
connection = DriverManager.getConnection("jdbc:db2://localhost:port/database", username, password);
connection.setAutoCommit(false);
String plsql = "UPDATE AR01.REBILL_PROPERTIES SET PROPERTY_VALUE='test6' where property_name='TEST'";
PreparedStatement pstatement = connection.prepareStatement(plsql);
pstatement.executeUpdate();
connection.commit();
} catch (SQLException ex) {
connection.rollback();
ex.printStackTrace();
}
}

希望这有帮助。

关于java - 准备语句因 DB2 SQL 错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34994596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com