我正在使用JDBC通过插入选择样式插入将一行插入DB2数据库表中。我同时尝试从变量以及ENTRY_DATE
使用中插入动态数据CURRENT DATE
:
INSERT INTO mytable (COL_A, COL_B, ENTRY_DATE)
SELECT COL_A, ?, CURRENT DATE FROM mytable
WHERE COL_A > 1;
我是sql和JDBC的新手,所以我不知道使用CURRENT DATE
是通用的还是特定于我们的系统的,但是它可以在普通的插入中工作,例如:
INSERT INTO mytable ENTRY_DATE values(CURRENT DATE);
我从来没有使用过插入选择样式的插入,所以我不知道错误是否在我的'?'上。我使用PreparedStatement.setString或CURRENT DATE
参数插入。但是我得到以下错误:
[BEA] [DB2 JDBC驱动程序] [DB2]要准备包含无效使用的参数标记
我是否需要用某些内容包围其中之一或全部,以表明它们不属于select语句?我需要重新整理我的陈述吗?
编辑:
我无法向您显示我的确切代码,但这是一个很接近的提示:
String sql = null;
PreparedStatement prepStmnt = null;
Connection conn = getConnection("database");
sql = "INSERT INTO MYTABLE ";
sql += "(COLUMN_A, COLUMN_B, ENTRY_DATE)";
sql += "SELECT COLUMN_A, ?, CURRENT DATE";
sql += "FROM MYTABLE WHERE COLUMN_A > 1;";
prepStmnt = conn.prepareStatement(sql);
prepStmnt.setString(1, myVar);
prepStmnt.execute();
我认为问题在于DB2对select的列列表中的参数一无所知,因此不知道select将返回什么,因此它无法正确地准备语句。
尝试这个:
INSERT INTO mytable (COL_A, COL_B, ENTRY_DATE)
SELECT COL_A, CAST(? AS CHAR(1)), CURRENT DATE FROM mytable
WHERE COL_A > 1;
将替换为CHAR(1)
正确的数据类型COL_B
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句