gpt4 book ai didi

jdbc - 插入选择不起作用

转载 作者:行者123 更新时间:2023-12-04 03:00:52 26 4
gpt4 key购买 nike

使用 Informix 11.7,我正在尝试在 select 语句中使用 jdbc 位置参数执行 INSERT SELECT 查询,如下所示:

INSERT INTO table1(id, code, label) 
SELECT ?, ?, ? FROM table2
WHERE ...

参数设置如下:

 stmt.setString(1, "auniqueid");
stmt.setString(2, "code");
stmt.setString(3, "coollabel");

我收到以下错误:

Exception in thread "main" java.sql.SQLException: A syntax error has occurred.

当位置参数“?”放在别处它工作正常。我使用 PostgreSQL 没有这个问题。我的查询有什么问题?我使用 Informix JDBC Driver v3.70 JC1。

感谢您的帮助。

最佳答案

您是否希望获得通过占位符指定的列名?如果是这样,你就什么都躲不掉了;您不能将占位符用于查询的结构元素,例如列名或表名。它们只能替代值(value)。如果要动态SQL指定列,使用动态SQL;创建一个包含以下内容的字符串:

INSERT INTO table1(id, code, label)
SELECT auniqueid, code, coollabel
FROM table2
WHERE ...

并与之合作。

如果这些占位符将成为值,那么您将一遍又一遍地插入相同的值,一次为查询返回的每一行插入一次,这通常不是您想要的;您只需插入一行带有 VALUES 子句的行,其中允许使用占位符:

INSERT INTO table1(id, code, label) VALUES(?, ?, ?);

那会很好。

据我所知,此行为符合 SQL 标准。如果它在 PostgreSQL 中的工作方式不同,那么 PostgreSQL 提供了对标准的扩展。

关于jdbc - 插入选择不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14650288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com