我尝试将java应用程序中的值和表1中的值插入表2。我得到以下错误(db2 z/os):
Exception in thread "main" com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException: DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1;DB2T.TSOZ360_WV_AUSGANG, DRIVER=3.66.46
PreparedStatement _prep = con.prepareStatement("INSERT INTO DB2T.TABLE2 (column1, column2, column3 , column4, column5, column6) SELECT ?, ?, ?, ?, column5, column6 FROM DB2T.TABLE1 WHERE column1 = ? column2 = ? AND column3 = ?");
_prep.setString(1,"HELLO");
_prep.setString(2,"H");
_prep.setString(3,"1234567890");
_prep.setString(4,"Hsdfdsffdssdfsdfd");
_prep.setLong(5,9876543210l);
_prep.setInt(6,1);
_prep.setInt(7,12345678);
Table1:
column1, column2, column3 , column4, column5, column6
Table2
column1, column2, column3 , column4, column5, column6
因此,我想在 java 应用程序中生成的值插入到 TABLE2 中,并将 TABLE1 中的两个值插入。无需将这两个值导入应用程序。我做错了什么?
您得到的sql异常表明您正试图将两个相同的值插入到一个接受唯一值的列中(您是否不止一次使用了具有相同参数值的insert?).
然而,您的设计仍然很糟糕,所以我建议您将查询/语句拆分为select和insert(2个查询/语句,而不是1个)。这将使代码更可读,也更容易调试。其次,您不应该使用列名作为参数(?)在PreparedStatement中(Prepared语句是可重用的,但是,如果列名被参数化,数据库就不能重用该语句)。
这意味着这样做是错误的
String sql = "SELECT ?, ?, ?, ?, column5, column6 FROM DB2T.TABLE1 WHERE column1 = ? column2 = ?
_prep.setString(1, colName1);
_prep.setString(2, colName2);
....
您必须在查询中指定列名(从 T 中选择 a,b,c,其中 x=?)。如果需要动态获取它们,您可以使用字符串连接(如果您不清理用户输入等,这可能容易进行 sql 注入)
String dynamicColNames = getColumnNames();//just some method to get the names as one string
String sql = "SELECT "+dynamicColNames + " FROM ....";//
//dynamicColNames may contain col1, col2, col3 etc
我正在读取Oracle中的一个表,并将整个转储插入到DB2中。我使用简单的scala类来完成上面提到的任务。我已将插入批大小设置为300。在更新了几个批处理之后,类将抛出以下异常 由于该异常与IntegrityConstraint相关,我尝试检查是否存在复合主键(ID+TimeStamp+9999-12-31 00.00.000000),但Oracle表和Db2表中都不存在组合键。Db2表的约束条
我的代码: 请帮助,因为这是在生产。。。
我在DB2中创建了名为“”的本地数据库,然后创建了名为“”的表。 我发现该表的模式名为“”。 我试图使用连接到数据库,但出现了这个异常 我在internet上尝试了许多解决方案,比如set模式,但不幸的是都不起作用。 这是我使用的JDBC代码
谁能告诉我问题的原因,非常感谢! ps:DB2版本为9.5
我对DB2比较陌生,但对SQL不熟悉。我在从中减去几分钟后尝试语句时遇到以下错误: 我遇到的错误是: DB2 SQL 错误: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=TCCAWZTXD;选择*;,驱动程序=3.66.46 如何修复此错误?