DB2 SQL Error: SQLCODE=-117, SQLSTATE=42802, SQLERRMC=null,



我在 Java 中开发并将记录插入 DB2 数据库时遇到了这个问题。

sqlInsert = "INSERT into SI_Orders (SellersNo,OrderDate,ShipDatePlanned,"
            + "Warehouse,OrderType,ShipToName,ShipToAddress1,"
            + "ShipToCity,ShipToProvState,ShipToPostalZip,ShipToCountry" + ") "
            + "VALUES (?, ?, ?,'01','DO','bob','a','toronto','ON','h0h0h0','CA')";
    try {
        con = dc.getConnection();
        con.setAutoCommit(false);
        db2Stmt = con.prepareStatement(sqlInsert);
        for (Order order : orderWrapper.orders) {
            save1 = con.setSavepoint();
            db2Stmt.setString(1, order.getOrderId());
            db2Stmt.setTimestamp(2, shipStnDateFormat( order.getOrderDate() ) );            
            db2Stmt.setString(3, null); // PONo
             /*
             * db2Stmt.setTimestamp(4, shipStnDateFormat(order.getShipByDate()));
             */
            db2Stmt.executeUpdate();    
            //con.commit();
        } // end of enhanced for each block
    } // end of try block
    catch (SQLException e1) {
        e1.printStackTrace();
        if (con != null) {
            try {
                System.err.print("Transaction is being rolled back.");
                con.rollback();
            } 
            catch (SQLException se) {
                se.printStackTrace();
            } 
        } // end of if(con != null) block
    } // end of catch block
    finally {
        // Clean-up code
        con.setAutoCommit(true);
        if (db2Stmt != null) {
            db2Stmt.close();
        }
        if (con !=null){
            con.close();
        }
    } // end of finally block
} // end of insertDB method
private Timestamp shipStnDateFormat(String shipByDate) {
    SimpleDateFormat shipStnDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    SimpleDateFormat standardDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String parsedFinalFormattedDate = null;
    Date finalDate = null;
    if (shipByDate == null)
        return new java.sql.Timestamp(0); // return a dummy value
    else {
        try {
            Date parsedShipByDate = shipStnDateFormat.parse(shipByDate); //
            parsedFinalFormattedDate = standardDateFormat.format(parsedShipByDate); //
            finalDate = standardDateFormat.parse(parsedFinalFormattedDate); //
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return new java.sql.Timestamp(finalDate.getTime());
    } // end of else statement
} // end of shipStnDateFormat method`

我收到此错误...DB2 SQL 错误: SQLCODE=-117, SQLSTATE=42802, SQLERRMC=null, DRIVER=3.6in8.61

显然,我希望它插入所有三列而不会引发 SQL 异常。

此外,这是我用于创建表的 DDL,它显示了每列的数据类型以及是否强制执行了 NOT NULL 约束。

第一列"OrderId"是一个标识列,所以我还没有为此发布插入参数。

CREATE TABLE SI_Orders (
OrderId INTEGER NOT NULL generated always as identity (start with 0, 
increment by 1, no cache),
SellersNo VARCHAR(20) NOT NULL,
OrderDate Timestamp(0) NOT NULL,
PONo VARCHAR(20),
ShipDatePlanned Timestamp(0) NOT NULL,
CONSTRAINT PK_SI_Orders PRIMARY KEY (OrderId)
);

您正在设置:

db2Stmt.setString(3, null); // PONo

当模型为该列声明时:

ShipDatePlanned Timestamp(0) NOT NULL,

因此不允许将其设置为 NULL,将参数 3 更新为非 NULL 值应该可以解决此问题。

若要向查询添加列,请执行以下操作:

sqlInsert = "INSERT into SI_Orders (SellersNo,OrderDate,ShipDatePlanned,PONo,"
        + "Warehouse,OrderType,ShipToName,ShipToAddress1,"
        + "ShipToCity,ShipToProvState,ShipToPostalZip,ShipToCountry" + ") "
        + "VALUES (?, ?, ?,?,'01','DO','bob','a','toronto','ON','h0h0h0',?)";

因此,在字符串中的随机位置添加一列,并在 VALUES 中添加 ? 将添加该列。

? 的索引从 1 开始,仅与参数替换为的列名匹配。

例如:在此示例中,ShipToCountry将是索引5

最新更新