【问题标题】:How do I insert an empty DateTime to a MS Access database?如何将空的 DateTime 插入 MS Access 数据库?
【发布时间】:2018-10-11 11:19:32
【问题描述】:

我的问题是我不知道如何处理一个空的 LocalDate 对象。

我有一个 Excel 表,其中有一个日期列。格式是这样的:

19693112 或者 00000000(如果日期未知)

在我的 java 应用程序中,我更改了数据的格式并将其上传到数据库。

我首先将字符串转换为我需要的格式(即 31.12.1969)。

我可以毫无问题地将第一种格式插入到我的数据库中。但是第二个永远不会起作用,因为我的转换类将其转换为 00.00.0000,而 MS Access 不接受这一点。

我已经尝试将我想要的值设置为“null”,但数据库无法处理日期字段的此值。

有没有办法让数据库中的值只显示一个空的日期字段?

感谢您的帮助。

public static void insertNewPensioners(List<Pensioner> newPensioners) {

    if (cell.getColumnIndex() == indexe.get(19)) { //checks if correct excelcell is used
        String cellValue = cell.getStringCellValue();
        if (cellValue.matches("0+")) {
            resignationDate = null;
        } else {
            resignationDate = DateFormatter.formatDate(cellValue);
        }

        pensionerExcel.add(new Pensioner(pknr, idkz, resignationDate));

        insertNewPensioners(newPensioners);
        
        public static void insertNewPensioners (List < Pensioner > newPensioners) {
            try {
                connect(pathDB);
            } catch (Exception e) {
                Alerts.connectionError();
                e.printStackTrace();
            }

            for (int i = 0; i < newPensioners.size(); i++) {
                String insert = ("Insert into Pensionär (PKNR, IDKZ, ResignationDate) VALUES " +
                        "(?,?,?)");
                try {
                    ps = connection.prepareStatement(insert);
                    ps.setInt(1, newPensioners.get(i).getPensionInsuranceNumber());
                    ps.setInt(2, newPensioners.get(i).getIdkz());
                    ps.setDate(3, Date.valueOf(newPensioners.get(i).getResignationDate()));
                    ps.executeUpdate();
                    validRows++;
                } catch (Exception e) {
                    Alerts.wrongValues();
                    e.printStackTrace();
                }
            }
            close();
        }

【问题讨论】:

  • 你可以尝试这样设置DateTime(DateTimeZone zone),所以你只设置时区,日期为空。数据库应该能够处理这个
  • 对不起。如果有区别,请输入 LocalDate 而不是 DateTime。
  • 当然应该在您的字符串转换代码中检查 0000000 值并替换为 Null ?您如何尝试插入 Null 值
  • 尝试 jorciney 在此处发布的修复 stackoverflow.com/questions/44302837/…
  • 您想在 Access 数据库中插入什么?数据库空值? MS Access 可以接受的最低日期是 0101-01-01 00:00:00

标签: java database datetime ms-access datetime-format


【解决方案1】:

null 将再次给出空指针异常。他还检查了一个 空字符串,但我想要的是“转换” 00000000 为空 本地日期。我需要知道如何获得可用于 我的 ms 访问数据库。

但事实是 - 如前所述 - Access 表中的“空日期”是 Null - 没有其他选择。

所以:

  • 修改您的代码,为您的空日期插入 Null
  • 调整您的代码以期望并接受 Null 作为空日期,并将其转换为您的代码接受的任何日期 (00000000)。

【讨论】:

  • 感谢您的回答。我已经考虑过您的第一个解决方案。但我不知道如何在java中实现它。如果您或其他人能告诉我如何实现它,那就太好了。
  • 对不起,我不能,我不做 Java。但是很多人都这样做了,那么为什么不在您的问题中包含相关的代码呢?
猜你喜欢
  • 2011-04-01
  • 1970-01-01
  • 2013-07-20
  • 2013-12-14
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多