Prepared Statement 因 DB2 SQL 错误而失败
Posted
技术标签:
【中文标题】Prepared Statement 因 DB2 SQL 错误而失败【英文标题】:Prepared Statement failing with DB2 SQL error 【发布时间】:2016-01-25 14:07:59 【问题描述】:我正在尝试执行以下代码。
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
如何解决此问题。为什么在这种情况下支持准备好的语句?
【问题讨论】:
您需要删除语句中END
之后的最后一个分号。
我尝试在 END 后删除分号。现在我得到了不同的错误..
com.ibm.db2.jcc.b.co: DB2 SQL 错误:SQLCODE=-104, SQLSTATE=42601, SQLERRMC=call BEGIN;BEGIN-OF-STATEMENT;我认为您需要使用对connection.commit()
的JDBC 调用来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();
希望这会有所帮助。
【讨论】:
以上是关于Prepared Statement 因 DB2 SQL 错误而失败的主要内容,如果未能解决你的问题,请参考以下文章
使用 Prepared Statement 设置 LONG 数据类型
当 Statement 与 Java 和 Oracle 一起使用时,Prepared Statement 不起作用
MySQL Prepared Statement:更新多个值
MYSQLI Prepared statement update statement with where in array