拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何在Java中使用带问号的strftime函式

如何在Java中使用带问号的strftime函式

白鹭 - 2022-02-14 2153 0 0

我计划将“日期”物件添加到 SQLite 数据库中。但是,我收到有关插入为空的错误。错误是这个

org.sqlite.SQLiteException: [SQLITE_CONSTRAINT_NOTNULL]  A NOT NULL constraint failed (NOT NULL constraint failed: dates.Tarih)
    at org.sqlite.core.DB.newSQLException(DB.java:909)
    at org.sqlite.core.DB.newSQLException(DB.java:921)
    at org.sqlite.core.DB.execute(DB.java:825)
    at org.sqlite.jdbc3.JDBC3PreparedStatement.execute(JDBC3PreparedStatement.java:53)



这是我的代码。我怀疑从问号。因为当我洗掉它们并将它们放在'now'. 它确实有效。但是,以下代码会引发上述错误。

插入方法


public static void insert(Date date, Date date2)  {
       try{
           System.out.println(" date:" date.toString());

           String query = "insert into dates(Tarih,Tarih2) values(strftime('%d-%m-%Y',?), strftime('%d-%m-%Y',?))";
           pst=conn.prepareStatement(query);
           pst.setObject(1,date);
           pst.setObject(2,date2);

           pst.execute();

       }catch (SQLException e){
           e.printStackTrace();
       }


    }

uj5u.com热心网友回复:

可能您已将列定义Tarih为,NOT NULL并且您的代码正试图null在表中插入一个值。

你得到的原因nullstrftime()是因为你不通过SQLite的有效日期。
对于 SQLite,有效日期/日期时间可以是格式的字符串,也可以是yyyy-MM-dd hh:mm:ss整数 unix 纪元时间或代表儒略日的浮点数。

您传递的是 Date 物件,这是您的错误。

解决问题的一种方法是从每个Date物件中提取一个代表 unix 纪元时间的整数并将其传递给strftime()

public static void insert(Date date, Date date2)  {
    try{
        long d = date.toInstant().toEpochMilli() / 1000; 
        long d2 = date2.toInstant().toEpochMilli() / 1000;

        String query = "insert into dates(Tarih,Tarih2) values(strftime('%d-%m-%Y', ?, 'unixepoch'), strftime('%d-%m-%Y', ?, 'unixepoch'))";
        pst=conn.prepareStatement(query);
        pst.setLong(1, d);
        pst.setLong(2, d2);
        pst.execute();
    } catch (SQLException e){
        e.printStackTrace();
    }
}
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *