具有Java中多个条件的Oracle UPDATE命令

时间:2010-02-19 17:42:32

标签: java oracle jdbc

我遇到了下面的Java代码问题。它应该更新给出ID的表中的某些记录,以及STATUS列为'good'的位置(在任何给定时间这只是一行)。但是,当我运行下面的代码时,它似乎忽略了AND STATUS = 'good'部分,并在NUMRECS匹配的任何地方更新了所有ID

static void insertNumRecs()
    {
        PreparedStatement insert = null;
        try
        {
            String insertNumRecsCommand = "UPDATE FILESTATUS SET NUMRECS = ? " +
                    "WHERE ID = ? AND STATUS = 'good'";
            insert = Main.con.prepareStatement(insertNumRecsCommand);
            insert.setInt(1, Main.numRecs);
            insert.setString(2, Main.docID);
            insert.executeUpdate();
        }
        catch (Exception ex) {ex.printStackTrace();}
        finally {close(null, insert);}
    }

我到处尝试搜索这个,但我找不到任何答案。当我直接从数据库运行命令时,它工作正常,这让我更加困惑。

提前致谢。

2 个答案:

答案 0 :(得分:2)

尝试写

"WHERE ID = ? AND STATUS = ?"

并使用

insert.setString(3, "good");

答案 1 :(得分:2)

这并不能解释问题,但我想知道你为什么不这样做:

static void insertNumRecs() 
    { 
        PreparedStatement insert = null; 
        try 
        { 
            String insertNumRecsCommand = "UPDATE FILESTATUS SET NUMRECS = ? " + 
                    "WHERE ID = ? AND STATUS = ?"; 
            insert = Main.con.prepareStatement(insertNumRecsCommand); 
            insert.setInt(1, Main.numRecs); 
            insert.setString(2, Main.docID); 
            insert.setString(3, "good");
            insert.executeUpdate(); 
        } 
        catch (Exception ex) {ex.printStackTrace();} 
        finally {close(null, insert);} 
    } 

看不到您的数据,所以我无法判断是否是一个案例问题(“好”!=“好”)

您确定要连接到您认为自己的数据库吗?如果连接字符串指向一个数据库,并且您对另一个数据库运行测试,则可以解释您没有看到更改的原因。