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)。