我试图弄清楚一段代码已存在多年,但最近开始表现不同(不确定是否因为更新版本的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管理工作室运行SQL,它可以正常工作,并告知我插入了1行。我知道运行代码的SQL不会导致任何SQL异常(在任何情况下都会导致代码流直接落入我的catch块,对吗?)
感谢您的关注! ķ
编辑: 只想添加有关此主题的研究信息: executeUpdate的API文档提到它返回的'update count'是(1)SQL数据操作语言(DML)语句的行数或(2)0表示不返回任何内容的SQL语句
由于该语句是纯粹的insert语句,我不明白它是如何返回除非负整数之外的任何东西。我的意思是,insert语句唯一可能的结果是行数,对吧?