gpt4 book ai didi

java - 通过 JDBC 发送 DEFAULT 占位符?

转载 作者:搜寻专家 更新时间:2023-11-01 02:44:34 25 4
gpt4 key购买 nike

有没有办法通过 JDBC 显式发送 DEFAULT 占位符,例如 INSERT INTO sometables VALUES (blah, DEFAULT)? (我几乎可以肯定答案是“否”,但我正在寻找 JDBC 专家确认)。

假设您有一个 PreparedStatement,例如:

INSERT INTO mytable(a, b) VALUES (?, ?)

表格:

CREATE TABLE mytable (
a integer,
b integer default some_function()
);

并且您想在批处理中的某些执行中为 mytable.b 使用数据库集 DEFAULT 而在其他执行中则不使用。

在常规 SQL 中,您将编写:

INSERT INTO mytable(a, b) VALUES (1, 42)
INSERT INTO mytable(a, b) VALUES (2, DEFAULT);
...

或者当然:

INSERT INTO mytable(a, b) VALUES (1, 42)
INSERT INTO mytable(a) VALUES (2);

...但是您不能通过 JDBC 执行此操作。 setString("DEFAULT") 当然不会发送 DEFAULT 关键字,只会发送字符串文字 'DEFAULT'

有没有办法在任何广泛使用的驱动程序中设置一个表示 DEFAULT 的占位符参数?

我看不到使用标准 API 和规范来做到这一点的方法。

我在想像这样的事情:

pstmt.setObject(2, Postgresql.DEFAULT, Types.OTHER);

Postgresql.DEFAULT 是一个特殊的占位符实例,因为对于 PreparedStatement 似乎没有 setDefault() 方法。 .

是否有任何现有驱动程序支持此功能?

最佳答案

没有标准的方法可以做到这一点。据我所知,SQL 标准不支持通过参数声明使用 DEFAULT 的机制。 SQL 标准似乎假定每个 INSERT 都是为特定目的而设计的。所以声明 DEFAULT 只能在插入语句本身中完成,不能作为参数的值。在这些类型的决策中,JDBC 规范通常遵循 SQL 标准。

您目前拥有的唯一方法是在 JDBC 驱动程序中创建特定于供应商的方法,例如您在问题本身中指定的方法,但您也可以考虑类似的方法:

澄清一下:下面是一个驱动程序实现如何解决它的示例,它实际上并不是这样工作的。

使用 setNull(int, int)

setNull(idx, PostgresTypes.DEFAULT_VALUE)

或使用 setNull(int, int, String)

setNull(idx, Types.<correct-field-type>, Postgres.DEFAULT_VALUE_MARKER)

然而,这假定 PostgreSQL 实际上有一种通过参数指定 DEFAULT 的方法,或者驱动程序实现将为每组接收到的参数解析和重新创建语句,以便它可以声明一个文字 默认

我不知道目前是否有任何驱动程序支持这种解决方法。

关于java - 通过 JDBC 发送 DEFAULT 占位符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25779623/

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