Estoy planeando agregar objetos 'Fecha' en la base de datos SQLite. Sin embargo, recibo un error acerca de que la inserción es nula. el error es este
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) Este es mi código. Sospecho por los signos de interrogación. Porque cuando los elimino y los coloco con 'now' . De hecho, funciona. Pero, el siguiente código arroja el error anterior.
Método de inserción
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(); } }Probablemente haya definido la columna Tarih como NOT NULL y su código está tratando de insertar un valor null en la tabla.
La razón por la que obtiene un null de strftime() es porque no pasa una fecha válida para SQLite.
Para SQLite, las fechas/horas de fecha válidas son cadenas en el formato yyyy-MM-dd hh:mm:ss , o tiempos de época enteros de Unix o números de coma flotante que representan días julianos.
Lo que pasa son objetos de fecha y este es su error.
Una forma de resolver el problema es extraer de cada uno de los objetos Date un número entero que represente la época de Unix y pasarlo a 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(); } }