[英]Prepared Statement failing with DB2 SQL error: SQLCODE: -401, SQLSTATE: 42818
[英]Prepared Statement failing with DB2 SQL error
我正在嘗試執行以下代碼。
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
如何解決這個問題。 為什么在這種情況下支持准備好的語句?
我認為您需要使用對connection.commit()
的JDBC調用來commit
事務。
本文為您提供了一個很好的例子。
您的代碼將變為下面的內容
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();
}
}
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.