我有下面的代码,我在其中向一个表中插入记录。当我尝试获取结果集时,它返回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
}
发布于 2014-09-09 21:00:13
在将INSERT
、UPDATE
或DELETE
等SQL语句与PreparedStatement
一起使用时,必须使用executeUpdate
,它将返回受影响的行数。在本例中,sql操作根本没有生成ResultSet
,因此调用executeQuery将抛出SQLException
。
如果您确实需要一个SQL,则必须使用SELECT
ResultSet
操作执行另一个语句。
请参阅用于PreparedStatement#executeQuery和PreparedStatement#executeUpdate的javadoc
发布于 2018-06-27 03:57:10
这似乎是一个老问题,但我正在寻找类似的解决方案,所以也许人们仍然需要这个。
如果您正在执行insert语句,则可以使用: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 = "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();
}
发布于 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
对象。
PreparedStatement pstmt = connect.prepareStatement("SELECT * FROM tableName");
然后,这将为您提供包含查询生成的数据的ResultSet
对象
ResultSet rstest = pstmt.executeQuery();
https://stackoverflow.com/questions/25745094
复制相似问题