通过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()
);
而且您想在某些批处理的执行中使用数据库集合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()
方法。
是否有任何现有的驱动程序支持这个?
insert into mytable(a b) values (?, ?)
和insert into mytable(a b) values (?, ?)
。 - 9000COLUMN_NAME, COLUMN_DEFAULT
FROMINFORMATION_SCHEMA
.COLUMNS
WHERETABLE_SCHEMA
='dbName' ANDTABLE_NAME
='tableName'; - Aaron Dunigan AtLee