首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从insert语句获取结果集

从insert语句获取结果集
EN

Stack Overflow用户
提问于 2014-09-09 20:48:43
回答 3查看 19.4K关注 0票数 3

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

代码语言:javascript
复制
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();

编辑:已解决

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

代码语言:javascript
复制
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
        } 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-09 21:00:13

在将INSERTUPDATEDELETE等SQL语句与PreparedStatement一起使用时,必须使用executeUpdate,它将返回受影响的行数。在本例中,sql操作根本没有生成ResultSet,因此调用executeQuery将抛出SQLException

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

请参阅用于PreparedStatement#executeQueryPreparedStatement#executeUpdate的javadoc

票数 10
EN

Stack Overflow用户

发布于 2018-06-27 03:57:10

这似乎是一个老问题,但我正在寻找类似的解决方案,所以也许人们仍然需要这个。

如果您正在执行insert语句,则可以使用:Connection.PreparedStatement(String, String[])构造函数,并使用ps.getGeneratedKeys()将这些构造函数赋值给ResultSet

它看起来像这样:

代码语言:javascript
复制
public void sqlQuery() {
    PreparedStatement ps = null;
    ResultSet rs = null;
    Connection conn; //Assume this is a properly defined Connection
    String sql = "insert whatever into whatever";
    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();
}
票数 5
EN

Stack Overflow用户

发布于 2014-09-09 20:50:12

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

这意味着connect.prepareStatement(sql1);使用您的insert查询创建了PreparedStatement对象。

当您执行pst.executeUpdate();时,它将为SQL Data Manipulation Language (DML)语句返回行数,或者为不返回任何内容的SQL语句返回0。

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

代码语言:javascript
复制
    PreparedStatement pstmt = connect.prepareStatement("SELECT * FROM tableName");

然后,这将为您提供包含查询生成的数据的ResultSet对象

代码语言:javascript
复制
    ResultSet rstest = pstmt.executeQuery();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25745094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档