有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

sql java语句。executeUpdate()返回的更新计数不是1。零星

我试图找出一段代码,这段代码已经按原样存在了好几年,但最近开始表现出不同的行为(不确定是因为较新版本的jre还是代码运行的环境,但我知道的还不够多)。总之,下面粘贴的代码的基本要点是,我一次处理一条记录,并将其插入一个新表中。我的想法是一次只能插入一行。这段代码来自2000年左右,当时工程师决定进行超级偏执狂精神检查,以确保在所述表格中插入一条且只有一条记录。突然之间,这段代码抛出了异常,表明插入的行数不是1(不幸的是,我不知道插入了多少行,因为代码缺少这段日志记录)

    //
// If the result set is empty, then get the next master record id and insert a new record into the
// Holding_Tank_Master_Records.
//
if ( !mrRecords.next() )
{
    // a new master record is needed
    mrid = this.getMasterRecordId();

    log.debug("new master record id = " + mrid);

    insertSQL = new String("INSERT INTO Holding_Tank_Master_Records (" +
                        "Master_Record_Id, Probe_Date, Import_Filename, " +
    "Pennies, Nickels, Dimes, Quarters, " +
    "Half_Dollars, SBA_Dollars, One_Dollar_Bills, " +
    "Five_Dollar_Bills, Ten_Dollar_Bills, Twenty_Dollar_Bills) " +
    "VALUES( " + mrid + ", '" + curProbeDate.toString() + "', 'Avail AVL APC', " +
    "0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )");                  

    int result = mrStatement.executeUpdate(insertSQL);

    if ( result == 1 )
    {
        log.debug ( "NEW MASTER RECORD created for " + curProbeDate.toString() );
    }
    else
    {
        log.debug("Failed! SQL: " + insertSQL);

    String strErrMsg = "Failed to insert new record into Holding_Tank_Master_Records.  " +
        "Master_Record_Id = " + mrid + " Probe_Date = " + curProbeDate.toString() + 
        "Vehicle Farebox Id = " + Integer.toString(vehicleID) + ".";

        log.error( strErrMsg );
        throw new AvailFaretoolException( strErrMsg );
    }
}

所以,我看到的是“失败!”SQL消息以及抛出的自定义异常使我相信插入的行数不是1

以前有人见过这样的吗?你能在这里发现一个问题吗?顺便说一句,如果我要通过SQL management studio运行SQL,它可以正常工作,并显示一条消息,告诉我插入了1行。我知道在代码中运行的SQL不会导致任何SQL异常(在任何情况下都会导致代码流直接落入catch块,对吗?)

谢谢你看这个! K

编辑: 我只是想补充一下我迄今为止在这个主题上所做的研究: executeUpdate的API文档提到,它返回的“更新计数”要么是(1)SQL数据操作语言(DML)语句的行计数,要么是(2)对于不返回任何内容的SQL语句的行计数

由于该语句是一个纯insert语句,我不明白它如何能返回除非负整数之外的任何内容。我的意思是,insert语句唯一可能的结果是行计数,对吗


共 (0) 个答案