Java 有人认为我的更新或插入查询有问题吗?我使用的是事先准备好的声明

Java 有人认为我的更新或插入查询有问题吗?我使用的是事先准备好的声明,java,jdbc,prepared-statement,Java,Jdbc,Prepared Statement,public void insertOrUpdate(字符串customerNumber,Long creditLimitAmount) 抛出SQLException{ Connection connection2 = UBOCMSSQLConnectionUtill.getMSSqlConnection(); connection2.setAutoCommit(false); PreparedStatement updatePreparedStatement = null; PreparedS

public void insertOrUpdate(字符串customerNumber,Long creditLimitAmount) 抛出SQLException{

Connection connection2 = UBOCMSSQLConnectionUtill.getMSSqlConnection();
connection2.setAutoCommit(false);
PreparedStatement updatePreparedStatement = null;
PreparedStatement insertPreparedStatement = null;
try {
    String updateQuery = "UPDATE CRLM2 SET BR=?, LIMITTYPE =?, LIMITMEMBER=?,"
        + "PRODUCT=?,PRODTYPE=?,MTYDATE=?,CCY=?,CREQLIMAMT=?,MRKTLIMAMT=?,EXPDATE=?,"
        + "PRODGROUPID=?,AMT1=?,AMT2=?,DATE1=?,DATE2=?,TEXT1=?,TEXT2=?,LIMITSEQ=?,"
        + "STARTDATE=?,UPDATECOUNTER=? WHERE LIMITMEMBER = ?";

    String insertQuery = "insert into CRLM2(" + "BR," + "LIMITTYPE,"
        + "LIMITMEMBER," + "PRODUCT," + "PRODTYPE," + "MTYDATE,"
        + "CCY," + "CREQLIMAMT," + "MRKTLIMAMT," + "EXPDATE,"
        + "PRODGROUPID" + "AMT1," + "AMT2," + "DATE1," + "DATE2,"
        + "TEXT1," + "TEXT2," + "LIMITSEQ," + "STARTDATE,"
        + "UPDATECOUNTER) "
        + "values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

    /**
     * First try to update the row, but if that row does not exists,
     * then insert it.
     */
    updatePreparedStatement = connection2.prepareStatement(updateQuery);
    updatePreparedStatement.setString(1, "01");
    updatePreparedStatement.setString(2, "C");
    updatePreparedStatement.setString(3, customerNumber);
    updatePreparedStatement.setString(4, "FXD");
    updatePreparedStatement.setString(5, "FX");
    updatePreparedStatement.setString(6, "tbd");
    updatePreparedStatement.setString(7, "USD");
    updatePreparedStatement.setLong(8, creditLimitAmount);
    updatePreparedStatement.setNull(9, java.sql.Types.NUMERIC);
    updatePreparedStatement.setNull(10, java.sql.Types.DATE);
    updatePreparedStatement.setNull(11, java.sql.Types.CHAR);
    updatePreparedStatement.setNull(12, java.sql.Types.NUMERIC);
    updatePreparedStatement.setNull(13, java.sql.Types.NUMERIC);
    updatePreparedStatement.setNull(14, java.sql.Types.DATE);
    updatePreparedStatement.setNull(15, java.sql.Types.DATE);
    updatePreparedStatement.setNull(16, java.sql.Types.CHAR);
    updatePreparedStatement.setNull(17, java.sql.Types.CHAR);
    updatePreparedStatement.setNull(18, java.sql.Types.NUMERIC);
    updatePreparedStatement.setNull(19, java.sql.Types.DATE);
    updatePreparedStatement.setNull(20, java.sql.Types.NUMERIC);
    int count = updatePreparedStatement.executeUpdate();
    System.out.println("count value after updatePreparedStatement is "
        + count);
    connection2.commit();
    connection2.close();
    updatePreparedStatement.close();      
    Connection connection3 = UBOCMSSQLConnectionUtill
        .getMSSqlConnection();
    insertPreparedStatement = connection3.prepareStatement(insertQuery);
    connection3.setAutoCommit(false);
    if (count == 0) {
    insertPreparedStatement.setString(1, "01");
    insertPreparedStatement.setString(2, "C");
    insertPreparedStatement.setString(3, customerNumber);
    insertPreparedStatement.setString(4, "FXD");
    insertPreparedStatement.setString(5, "FX");
    insertPreparedStatement.setString(6, "tbd");
    insertPreparedStatement.setString(7, "USD");
    insertPreparedStatement.setLong(8, creditLimitAmount);
    insertPreparedStatement.setNull(9, java.sql.Types.NUMERIC);
    insertPreparedStatement.setNull(10, java.sql.Types.DATE);
    insertPreparedStatement.setNull(11, java.sql.Types.CHAR);
    insertPreparedStatement.setNull(12, java.sql.Types.NUMERIC);
    insertPreparedStatement.setNull(13, java.sql.Types.NUMERIC);
    insertPreparedStatement.setNull(14, java.sql.Types.DATE);
    insertPreparedStatement.setNull(15, java.sql.Types.DATE);
    insertPreparedStatement.setNull(16, java.sql.Types.CHAR);
    insertPreparedStatement.setNull(17, java.sql.Types.CHAR);
    insertPreparedStatement.setNull(18, java.sql.Types.NUMERIC);
    insertPreparedStatement.setNull(19, java.sql.Types.DATE);
    insertPreparedStatement.setNull(20, java.sql.Types.NUMERIC);
    insertPreparedStatement.executeUpdate();
    connection3.commit();
    }
} finally {
    if (insertPreparedStatement != null) {
    insertPreparedStatement.close();
    }
}

}
}

找到并返回数据库连接 java.sql.SQLException:[Microsoft][SQLServer 2000 JDBC驱动程序]参数绑定无效。 位于com.microsoft.jdbc.base.BaseExceptions.createException(未知源) 位于com.microsoft.jdbc.base.BaseExceptions.getException(未知源) 位于com.microsoft.jdbc.base.BasePreparedStatement.validateParameters(未知源) 位于com.microsoft.jdbc.base.BasePreparedStatement.validateParameters(未知源) 位于com.microsoft.jdbc.base.BasePreparedStatement.preImplExecute(未知源) 位于com.microsoft.jdbc.base.BaseStatement.commonExecute(未知源) 位于com.microsoft.jdbc.base.BaseStatement.executeUpdateInternal(未知源) 位于com.microsoft.jdbc.base.BasePreparedStatement.executeUpdate(未知源) 位于com.uboc.pdealcc.dao.pdealcdao.insertOrUpdate(pdealcdao.java:98) 位于com.uboc.pdealcc.dao.pdealcdao.getCustomerId(pdealcdao.java:37) 位于com.uboc.pdealc.processor.COpxDeal.CheckQlim(COpxDeal.java:165) 在com.uboc.pdealc.listeners.TablePopupListener.actionPerformed上(TablePopupListener.java:130) 在javax.swing.AbstractButton.fireActionPerformed(未知源)
在javax.swing.AbstractButton$Handler.actionPerformed(未知源)

更新查询中有21个参数,但您只为其中20个设置值



文森特是对的。更新查询有21个参数,插入查询有20个参数。但是,在代码中,您只为更新查询设置了20个参数


LIMITMEMBER是参数3和21。

@aditya86c我替换了你的?用数字显示您实际拥有的参数数量。但我仍然看到此错误[Microsoft][SQLServer 2000 JDBC驱动程序]对象已关闭。是否有人认为我的insert语句有错误,特别是在BRI,我在“BR”附近得到了此java.sql.SQLException:[Microsoft][SQLServer 2000 JDBC驱动程序][SQLServer]错误的语法。
    UPDATE CRLM2 SET BR=1, LIMITTYPE =2, LIMITMEMBER=3,"
    + "PRODUCT=4,PRODTYPE=5,MTYDATE=6,CCY=7,CREQLIMAMT=8,MRKTLIMAMT=9,EXPDATE=10,"
    + "PRODGROUPID=11,AMT1=12,AMT2=13,DATE1=14,DATE2=15,TEXT1=16,TEXT2=17,LIMITSEQ=18,"
    + "STARTDATE=19,UPDATECOUNTER=20 WHERE LIMITMEMBER = 21