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