Java更新Sql语句错误
我正在尝试使用Java更新Sql语句错误,java,sql,db2,Java,Sql,Db2,我正在尝试使用Java和以下代码更新Db2数据库: String sSqlString = "UPDATE P6DEVCDB00.P6OSTAPF SET STATVAL = '" + sStatVal + "' WHERE OPIID = '" + sOperationsitemid + "' AND CONGRPC = '" + sConfigGrpCode + "'"; // Do your select on a Db table. //statement = con.create
Java
和以下代码更新Db2
数据库:
String sSqlString = "UPDATE P6DEVCDB00.P6OSTAPF SET STATVAL = '" + sStatVal + "' WHERE OPIID = '" + sOperationsitemid + "' AND CONGRPC = '" + sConfigGrpCode + "'";
// Do your select on a Db table.
//statement = con.createStatement();
statement = con.prepareStatement(sSqlString);
int RowsAffected = statement.executeUpdate();
con.commit();
System.out.println(RowsAffected);
然后我得到以下错误:
DB2 SQL Error: SQLCODE=-7008, SQLSTATE=55019, SQLERRMC=P6OSTAPF ;
P6DEVCDB00;3, DRIVER=3.58.81
我已经打印出它将要运行的sql:
UPDATE P6DEVCDB00.P6OSTAPF SET STATVAL = 'ON'
WHERE OPIID = 'B20120707000681531' AND CONGRPC = 'STKLSTSTAT
当我使用SQLUI工具直接运行此sql时,它会工作,并且记录会更新 您的问题是,您试图在没有“日志记录”的表上使用事务,即设置事务 理想情况下,您应该将所有表(将在事务下运行)设置为日志记录,专门用于测试该属性;不管您是否能够模拟失败,您都需要确保您的代码能够处理事务。
此外,根据您的情况,您可能不需要显式管理事务。如果您使用的是这样的框架,它们通常可以为您管理事务,尽管这通常意味着您仍然需要在iSeries表上记录日志
如果您只是尝试测试基本的代码行为,请考虑使用内存中的数据库,例如(很遗憾,可以模拟一些LUW DB2行为,但不能模拟库列表)-这将免除您连接到box的需要,以及设置日志。您连接的用户是否有权对数据库进行更新?您好,谢谢您的回复,是,用户拥有正确的权限您确定连接到正确的DB模式吗?是,当我直接运行相同的update语句时,它是正确的模式。请注意,您可能会接受SQL注入-您应该使用准备好的语句。错误消息的实际文本是什么?我有一种感觉,如果您没有日志记录(数据库事务)的表设置,它可能会抱怨-这就是原因代码3(至少对于iSeries)。