从insert语句获取结果集

时间:2014-09-09 12:48:43

标签: java sql resultset

我有以下代码,我将记录插入表中。当我尝试获取结果集时,它返回null。如何将最新添加的行添加到结果集中?

String sql1 = "INSERT INTO [xxxx].[dbo].[xxxxxx](WORKFLOW_SEQ_NBR," +
                      " WORKFLOW_LOG_TYPE_CODE, WORKFLOW_STATUS_CODE, DISP_CODE, DISP_USER, DISP_COMMENT, DISP_TITLE, DISP_TS)" +
                      "VALUES(?,?,?,?,?,?,?,?)";
        PreparedStatement pst = connect.prepareStatement(sql1);
        pst.setString(1, ...);
        pst.setString(2, ...);
        ...
        ...
        ...
        pst.executeUpdate();

        ResultSet rstest = pst.executeQuery();
//          ResultSet rstest = pst.getResultSet();

编辑:已解决

添加以下方法转到最后添加的行

st.execute("Select * from [xxxx].[dbo].[xxxxxxxxx]");
        ResultSet rstest = st.getResultSet();
        rstest.afterLast();
        GETLASTINSERTED:
        while(rstest.previous()){
            System.out.println(rstest.getObject(1));
            break GETLASTINSERTED;//to read only the last row
        } 

3 个答案:

答案 0 :(得分:6)

使用INSERTUPDATEDELETEPreparedStatement等SQL语句时,必须使用executeUpdate,这将返回感伤的行。在这种情况下,sql操作不会产生ResultSet,因此调用executeQuery会抛出SQLException

如果您确实需要ResultSet,则必须使用SELECT SQL操作创建另一个语句。

请参阅PreparedStatement#executeQueryPreparedStatement#executeUpdate

的javadoc

答案 1 :(得分:1)

Connection#prepareStatement() - 创建一个PreparedStatement对象,用于将参数化的SQL语句发送到数据库。

表示connect.prepareStatement(sql1);使用插入查询创建了PreparedStatement对象。

当你执行pst.executeUpdate();时,它将返回SQL数据操作语言(DML)语句的行计数,或者返回0表示不返回任何内容的SQL语句

现在,如果您再次想要获取插入的数据,则需要使用Select query创建一个新的PreparedStatement对象。

PreparedStatement pstmt = connect.prepareStatement("SELECT * FROM tableName");

然后,它将为您提供包含查询

生成的数据的ResultSet对象
ResultSet rstest = pstmt.executeQuery();

答案 2 :(得分:0)

似乎这是一个较旧的问题,但是我正在寻找类似的解决方案,因此也许人们仍然会需要这个。

如果要执行插入语句,则可以使用Connection.PreparedStatement(String,String [])构造函数,然后使用ps.getGeneratedKeys()将其分配给ResultSet。

它看起来像这样:

public void sqlQuery() {
    PreparedStatement ps = null;
    ResultSet rs = null;
    Connection conn; //Assume this is a properly defined Connection
    String sql = "select example from examples";
    ps = conn.prepareStatement(sql, new String[]{"example"});
        //do anything else you need to do with the preparedStatement
    ps.execute;
    rs = ps.getGeneratedKeys();
    while(rs.next()){
        //do whatever is needed with the ResultSet
    }
     ps.close();
     rs.close();
}