我有以下代码从数据库中获取数据并进行更新。但是,结果集得到了更新,但我没有看到数据库中的更改。即使在我说commit()之后,数据库也没有得到更新。我在这里缺少什么?
Connection connect = ConnectionManager.getInstance().getConnection();
Statement st = connect.createStatement();
st.execute("Select * from ...");
ResultSet rs = st.getResultSet();
ResultSetMetaData md = rs.getMetaData() ;
rs.absolute(1);
rs.updateObject("StepName","ABCD" );
connect.commit();
//connect.close();
编辑:
现在,我有以下方法,但是我收到了错误。
rs.updateString("StepName", "ABCD");
rs.updateRow();
//rs.updateObject("StepName","ABCD" );
错误:com.jnetdirect.jsql.u:sp_cursor:提供的游标标识符值(0)无效。
好的,我现在有效。以下是我必须改变的方式。 工作解决方案:
Connection connect = ConnectionManager.getInstance().getConnection();
Statement st = connect.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
st.execute("Select * from ...");
ResultSet rs = st.getResultSet();
String queuename = "apples";
String updatedname = "bananas";
while(rs.next())
{
if(rs.getString(3).equals(queuename))
{
rs.updateString(3, updatedname );
System.out.println("updated: " + rs.getString(3));
rs.updateRow();
}else
{
System.out.println(rs.getRow() + ": " + rs.getString(3));
}
}
connect.commit();
rs.close();
connect.close();
}
答案 0 :(得分:1)
如果你看一下updateObject
的规格:
仅使用Object值更新指定的列。 updater方法用于更新当前行或插入行中的列值。 更新程序方法不更新基础数据库;而是调用updateRow或insertRow方法来更新数据库。
rs.updateObject
并不会更新数据库。尝试在rs.updateRow()
之后添加对updateObject
的调用。
答案 1 :(得分:1)
rs.absolute(1);可能没有移动光标。尝试: rs.next();
您可以尝试直接的SQL语句:
StringBuffer updates = new StringBuffer();
updates.append("UPDATE table_name ");
updates.append("SET StepName = ? );
updates.append("WHERE id = ?");
Statement updateStatement = connect.createStatement(updates.toString());
updateStatement.setString(1, "BlaBla");
updateStatement.setInt(2, 143);
updateStatement.executeUpdate();
答案 2 :(得分:1)
当您调用createStatement时,您需要使用允许您指定可更新结果集的重载。
Here is an example if found: http://www.xyzws.com/Javafaq/how-to-use-updatable-resultset-in-jdbc/179
我认为并非所有的驱动程序\数据库都支持此操作。