【问题标题】:JDBC Not returning ResultSetJDBC不返回结果集
【发布时间】:2012-02-23 19:12:05
【问题描述】:

我们正在将其从 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

【问题讨论】:

  • 查询实际返回的是什么?另外,SQLException 的细节是什么?应该有一个代码和状态可以提示问题...

标签: java jdbc websphere-7


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我意识到这不是一个直接的答案,但我认为您可以通过使用 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 深处的某个地方,上面看起来只是一个插入语句,所以它会跳过结果集。

    【讨论】:

      猜你喜欢
      • 2016-08-31
      • 2021-04-12
      • 1970-01-01
      • 2014-08-17
      • 2016-06-30
      • 2011-10-03
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      相关资源
      最近更新 更多