- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
有没有办法通过 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(idx, PostgresTypes.DEFAULT_VALUE)
setNull(idx, Types.<correct-field-type>, Postgres.DEFAULT_VALUE_MARKER)
然而,这假定 PostgreSQL 实际上有一种通过参数指定 DEFAULT
的方法,或者驱动程序实现将为每组接收到的参数解析和重新创建语句,以便它可以声明一个文字 默认
。
我不知道目前是否有任何驱动程序支持这种解决方法。
关于java - 通过 JDBC 发送 DEFAULT 占位符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25779623/
我的 DateTime 对象使用 DateTime.Now 分配了本地时间。我想知道一旦夏令时开始/结束,这个对象是否会给出正确的当前本地时间。或者我需要解决方法吗? 最佳答案 是的,DateTime
假设我需要“特定类别中可用的项目数量”与“所有项目的数量”的比率。请考虑这样的 MySQL 表: /* mysql> select * from Item; +----+------------+--
我有这张 table http://codepen.io/MetCastle/pen/lxceL我想使用 jQuery 根据 input type="number" 隐藏/显示列。表示整个列: Pro
想要制作一个看起来像这样的网格,其中 div/section 以百分比表示。 margin 在任何地方都是一样的。 http://www.ladda-upp.se/bilder/giefekcmgwm
这将返回 1(又名 TRUE) SELECT DATE_SUB(NOW(), INTERVAL 24*100 HOUR) = DATE_SUB(NOW(), INTERVAL 100 DAY); 10
我一直在尝试在 UIScrollView 中获取 UIView 的转换后的 CGRect。如果我不放大它就可以正常工作,但是一旦我放大,新的 CGRect 就会发生变化。这是让我接近的代码: CGFl
对于家庭作业,我需要在不使用内置模 (%) 运算符的情况下返回 num1 除以 num2 后的余数。我能够通过以下代码让大多数测试通过,但我仍然坚持如何解释给定数字的 -/+ 符号。我需要保留 num
我用 Javascript 创建了一个倒数计时器;它是成功的,期望未完成。事实上,从数学上讲,它是正确的,但是谷歌浏览器的浏览器设置“暂停”(因为没有更好的术语)SetInterval/Timeout
我有两个 的,每个都设置为其容器宽度的 45%。有没有办法使 居中?使得它们在容器的左右两侧有相同的空间,并且它们之间也有空间。 一开始我只是做了每个 50% 并且有 padding: 0px 2
我是一名优秀的程序员,十分优秀!