JDBC не возвращает ResultSet - PullRequest
       16

JDBC не возвращает ResultSet

1 голос
/ 23 февраля 2012

Мы переносим это из WAS 5 в WAS 7, и мы озадачены тем, почему это сейчас вызывает проблему.Строка executeQuery () вызывает исключение SQLException, сообщающее, что оно не возвращает ResultSet.Кто-нибудь знает, что изменилось в течение жизни WAS, что больше не позволяет этому работать?Это обновление JDBC или JRE?Я гуглил, но я действительно не уверен, что мне нужно искать, поэтому мои поиски были бесполезными.

        query = "insert into ST_Users ";
        query += "(ST_U_First_Name, ST_U_Middle_Name,
                               ST_U_Last_Name, ST_U_Facility_Name,
                               ST_U_Last_Trans_ID, ST_U_Last_Trans_Time) ";
        query += "values (?,?,?,?,?,?)";
        query += ";select SCOPE_IDENTITY() as UserId";

        pStmt = tokenConn.prepareStatement(query);
        pStmt.setString(1, user.getFirstName());
        pStmt.setString(2, user.getMiddleName());
        pStmt.setString(3, user.getLastName());
        pStmt.setString(4, user.getFacilityName());
        pStmt.setString(5, sysId.getSystemId());
        pStmt.setDate(6, new java.sql.Date(Calendar.getInstance()
                                         .getTime().getTime()));

        resultSet = pStmt.executeQuery();

TIA

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Я понимаю, что это не прямой ответ, но я думаю, что вы можете сделать то же самое (т.е. вернуть сгенерированный ключ), используя функции сгенерированного ключа API JDBC.

    query = "insert into ST_Users ";
    query += "(ST_U_First_Name, ST_U_Middle_Name,
                           ST_U_Last_Name, ST_U_Facility_Name,
                           ST_U_Last_Trans_ID, ST_U_Last_Trans_Time) ";
    query += "values (?,?,?,?,?,?)";

    pStmt = tokenConn.prepareStatement(query);
    pStmt.setString(1, user.getFirstName());
    pStmt.setString(2, user.getMiddleName());
    pStmt.setString(3, user.getLastName());
    pStmt.setString(4, user.getFacilityName());
    pStmt.setString(5, sysId.getSystemId());
    pStmt.setDate(6, new java.sql.Date(Calendar.getInstance()
                                     .getTime().getTime()));

    pStmt.executeUpdate(Statement.RETURN_GENERATED_KEYS);
    ResultSet key = pStmt.getGeneratedKeys();

    key.next(); // should always be true ... you should throw an exception if it isn't
    long generatedKey = key.getLong(1);

Я подозреваю, что где-то в недрах WAS вышеприведенное выглядит как просто оператор вставки, поэтому он пропускает набор результатов.

1 голос
/ 23 февраля 2012

У вас есть два запроса.Вы должны выполнить первый с executeUpdate(), а затем выполнить второй с executeQuery().

...