Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

265
Vistas
¿Cómo puedo usar la función strftime con signo de interrogación en Java?

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(); } }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

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(); } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda