更新结果集后更新数据库

时间:2014-08-13 14:24:21

标签: java jdbc

我有以下代码从数据库中获取数据并进行更新。但是,结果集得到了更新,但我没有看到数据库中的更改。即使在我说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();

        }

3 个答案:

答案 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

我认为并非所有的驱动程序\数据库都支持此操作。