簡體   English   中英

准備好的語句失敗,並出現DB2 SQL錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM