将 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 中的日期/时间字段-的主要内容,如果未能解决你的问题,请参考以下文章