кто-нибудь видит неправильно с моим обновлением или запросами на вставку? Я использую подготовленное заявление - PullRequest
2 голосов
/ 20 мая 2011

public void insertOrUpdate (String 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();
    }
}

}

}

найдено и возвращено db conn 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.m.jdbc.base.BaseStatement.executeUpdateInternal (Неизвестный источник) по адресу com.microsoft.jdbc.base.BasePreparedStatement.executeUpdate (Неизвестный источник) по адресу com.uboc.pdealcc.dao.PDealCCDao.insertOrUpdate (com.javal)uboc.pdealcc.dao.PDealCCDao.getCustomerId (PDealCCDao.java:37) в com.uboc.pdealcc.processor.COpxDeal.CheckQlim (COpxDeal.java:165) в com.uboc.pdealcc.listenerJava: 130) на javax.swing.AbstractButton.fireActionPerformed (Неизвестный источник) на javax.swing.AbstractButton $ Handler.actionPerformed (Неизвестный источник)

Ответы [ 2 ]

1 голос
/ 20 мая 2011

В запросе на обновление 21 параметр, но вы устанавливаете значения только для 20 из них.


    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
0 голосов
/ 20 мая 2011

Винсент прав.Ваш запрос на обновление содержит 21 параметр, а запрос на вставку - 20 параметров.Однако в вашем коде вы устанавливаете только 20 параметров для вашего запроса на обновление.

LIMITMEMBER - это параметры № 3 и 21.

...