【问题标题】:How can I read an Excel Date and store it into my database?如何读取 Excel 日期并将其存储到我的数据库中?
【发布时间】:2017-11-04 23:22:45
【问题描述】:

我正在尝试读取 Excel 日期值并将其存储到我的数据库中。

以下代码是我得到的:

Date birthdate = null;
case 8:
       birthdate = cell.getDateCellValue();
       break;

switch case是将Date存储在一个变量中,之后再放入一个数组中。

Identity id = new Identity(BSN, sort, birthdate, place);

我将这些值中的多个存储到一个数组列表中。

for(Identity id : Identities) {
        System.out.println(id.toString());
        idmc.insertID(""+id.getBSN(), id.getSort(), id.getBirthdate(), id.getPlace());
    }

日期的 getter 和 setter 很明显,但我会发布它以防万一。

public void Birthdate (Date birthdate) {
    this.birthdate = birthdate;
}

public Date getBirthdate() {
    return birthdate;
}

然后插入我从数组中得到的值,我使用这个方法:

public String insertID(String BSN, String SoortID, Date UitgiftedatumID, String UitgifteplaatsID) {
    String returning = null;
    try {
        query = "insert into Identiteit values(?,?,?,?);";

        pst = connection.prepareStatement(query);
        pst.setInt(1, Integer.parseInt(BSN));
        pst.setString(2, Sort);
        pst.setDate(3, birthdate);
        pst.setString(4, place);

        int response = pst.executeUpdate();
        returning = response +" Records has/have been edited";

    } catch (SQLException e) {
        returning = " ";

    }

    return returning;   
}

但是,这行:pst.setDate(3, UitgiftedatumID); 说:Incomatible types: java.util.Date cannot be converted to java.sql.Date.

我尝试过像:pst.setDate(3, (java.sql.Date) UitgiftedatumID);

但不幸的是,这对我来说并不奏效。

【问题讨论】:

    标签: java excel date


    【解决方案1】:

    Java 中有两个Date 类:java.util.Date(通用日期时间类)和java.sql.Date(表示日期的 JDBC 相关类(没有时间组件))。 PreparedStatement#setDate() 方法接受后者作为它的第二个参数。

    要将java.util.Date 的实例转换为java.sql.Date 的实例,您可以执行以下操作:

    java.util.Date UitgiftedatumID = ... // some value
    java.sql.Date sqlDate = UitgiftedatumID == null ? null : new java.sql.Date(UitgiftedatumID.getTime());
    

    【讨论】:

    • 我现在使用您的代码而不是初始化日期。但是,.getTime 部分给出了一条评论:Dereferencing Null Pointer,因此我在该规则上得到了NullPointerException,我在其中初始化了java.sql.Date sqlDate = new java.sql.Date(UitgiftedatumID.getTime());
    • 抱歉,我错过了初始日期可能是null 的可能性。我已经更新了我的答案来处理这个问题。
    • 非常非常非常感谢你!它现在工作了!最后日期显示在我的数据库中。非常感谢,祝您有美好的一天!
    • 不客气!请不要犹豫,投票和/或接受我的回答。
    • 如果您有(或可以获得)JDBC 4.2 版 JDBC 驱动程序,您应该更愿意转换为java.time.LocalDate 而不是java.sql.Date,然后通过pst.setObject() 传递它。较新的 Java 日期和时间类通常对程序员更友好,即使 Apache POI(或您用于 Excel 的)尚不支持它们,您越早开始将应用程序迁移到它们越好。
    猜你喜欢
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    相关资源
    最近更新 更多