将 null 插入 MS Access 中的日期/时间字段-

Posted

技术标签:

【中文标题】将 null 插入 MS Access 中的日期/时间字段-【英文标题】:Insert null into Date/Time field in 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 无关。 【参考方案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 之类的问题(见最后一行)。

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

【讨论】:

我想我必须使用准备好的语句。顺便说一句,括号用于定义包含空格的表格列。 如果您也在设计表格,请记住不鼓励创建带有空格的列。最好使用下划线。

以上是关于将 null 插入 MS Access 中的日期/时间字段-的主要内容,如果未能解决你的问题,请参考以下文章

将日期值插入 MS 访问

在 MS Access 中插入具有日期范围的多条记录

使用 pyodbc 将带日期的数据上传到 MS Access 数据库

在 MS-Access 中插入带日期时间的 SQL 命令

将唯一记录插入 MS access 2007

MS Access:使用 VBA 进行 SQL 插入的日期格式