【问题标题】:Use "DEFAULT" value in PreparedStatement在 PreparedStatement 中使用“DEFAULT”值
【发布时间】:2013-04-12 17:15:42
【问题描述】:

我有两张桌子:

CREATE TABLE possible_noise 
    (id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, text VARCHAR(50) NOT NULL, 
    PRIMARY KEY(id));

CREATE TABLE diagnostic
    (id BIGINT UNSIGNED NOT NULL, 
    noise SMALLINT UNSIGNED DEFAULT NULL, 
    friction ....., 
    FOREIGN KEY (noise) 
    REFERENCES possible_noise(id), 
    FOREIGN KEY(friction) ...... );

第一个表是噪声测试可能值的表,其中“文本”是一些文本值,例如“噪声正常”或“太大声”或类似的东西。第二个表是带有产品 id 和 x 列的产品表,其中所有列都用于一种类型的测试。如果测试未完成,则为 NULL


这是我的问题:

当我需要使用类似的东西时......

PreparedStatement prepState = conn.prepareStatement("UPDATE diagnostic SET noise=?, diagnostic_result=?, software_version=?, .... WHERE id=?;");

...并且需要设置 NULL

prepState.setInt(2, java.sql.Types.INTEGER)

它抛出错误:

无法添加或更新子行:外键约束失败(eps_remanufacturing_system.diagnostic, CONSTRAINT diagnostic_ibfk_3 FOREIGN KEY (noise) REFERENCES possible_noise (id))

我的问题:

是否有可能如何在preparedStatement 中使用来自sql (http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html) 的DEFAULT?

【问题讨论】:

  • 使用占位符意味着您将传递一个简单的值。您不能将关键字、函数调用或其他表达式动态传递给准备好的语句,您必须准备一个带有显式 noise = DEFAULT 的不同语句。我曾经使用过的每个 RDBMS 中的预处理语句都是如此。

标签: java mysql prepared-statement default


【解决方案1】:

您必须将占位符替换为 DEFAULT:

...
SET noise=DEFAULT
...

【讨论】:

    猜你喜欢
    • 2013-09-08
    • 2010-09-21
    • 2017-04-04
    • 2020-04-02
    • 2018-05-12
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    相关资源
    最近更新 更多