JDBC不返回ResultSet

时间:2012-02-23 19:12:05

标签: java jdbc websphere-7

我们正在将其从WAS 5迁移到WAS 7,我们很难理解为什么这会导致问题。 executeQuery()行抛出一个SQLException,表示它没有返回ResultSet。有谁知道在WAS的生活过程中发生了哪些变化,不再允许这种情况发生了?这是JDBC升级还是JRE的事情?我已经google了,但我真的不确定我应该搜索什么,所以我的搜索都没有用。

        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 个答案:

答案 0 :(得分:1)

你有两个问题。您应该使用executeUpdate()执行第一个,然后使用executeQuery()执行第二个。

答案 1 :(得分:1)

我意识到这不是一个直接的答案,但我认为你可以通过使用JDBC api生成的关键功能来做同样的事情(即返回生成的密钥)。

    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深处的某个地方看起来只是一个插入语句,所以它会跳过结果集。