【问题标题】:Insert null into Date/Time field in MS Access-将 null 插入 MS Access 中的日期/时间字段-
【发布时间】:2014-03-24 17:11:31
【问题描述】:

我一直在尝试将 null 值插入 MS Access 中的 Date/Time 列,但我不断收到此错误

以下是我如何设置空值的变体

String processedDate = ""; // doesn't work
String processedDate = null; // doesn't work

我在 SQL 插入过程中遇到的错误

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression

我用 Java 编写的插入查询

INSERT INTO DonorDetails ([SIGNUP DATE],Remarks, [Date Processed])values ('25/03/2014','','')

当我知道值为 null 时,是否必须显式构造没有 [Processed Date] 列的 SQL 语句?或者有没有更简单的方法?

【问题讨论】:

  • 你是如何给语句赋值的?您的 java 代码与您发布的 SQL 无关。

标签: java ms-access ms-access-2007


【解决方案1】:

在 SQL 中,null 值必须由关键字 NULL 表示。

INSERT INTO DonorDetails
([SIGNUP DATE], Remarks, [Date Processed])
VALUES (#2014/03/25#, NULL, NULL)
String processedDate = "NULL";

【讨论】:

  • 我的查询是用 Java 编写的
  • 不,您的查询是用 SQL 编写的。 INSERT 语句显然是一条 SQL 语句。您正在使用 Java 来构建查询文本并将其发送到数据库。
  • 我使用了您的方法,打印输出更改为'NULL',而不是NULL。我仍然遇到同样的错误。
  • if (text == null) insertion = "NULL" else insertion = "'" + text + "'"。但我建议使用命令参数而不是字符串连接。这些会自动为您处理所有这些细节,包括非常棘手的日期格式。
【解决方案2】:

不是很清楚你是如何构建查询的,但一个好习惯是创建一个这样的准备好的语句:

PreparedStatement ps = connection.prepareStatement("INSERT INTO DonorDetails (signup_date, remarks, date_processed) values (?,?,?)");
ps.setTimestamp(1, someTimestamp);
ps.setString(2, someRemark);
ps.setNull(3, Types.TIMESTAMP);

这不会太依赖于所使用的数据库和驱动程序,并且还解决了插入 null 之类的问题(见最后一行)。

附:我不知道插入中的括号([])是什么意思,所以我只是猜到了列名

【讨论】:

  • 我想我必须使用准备好的语句。顺便说一句,括号用于定义包含空格的表格列。
  • 如果您也在设计表格,请记住不鼓励创建带有空格的列。最好使用下划线。
猜你喜欢
  • 2016-07-16
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
相关资源
最近更新 更多