¿Cómo insertar un registro SQLite con un horario establecido en ‘ahora’ en la aplicación Android?

Diga, tenemos una tabla creada como:

create table notes (_id integer primary key autoincrement, created_date date) 

Para insertar un registro, usaría

 ContentValues initialValues = new ContentValues(); initialValues.put("date_created", ""); long rowId = mDb.insert(DATABASE_TABLE, null, initialValues); 

Pero, ¿cómo configurar la columna date_created para ahora ? Para dejar en claro, el

 initialValues.put("date_created", "datetime('now')"); 

No es la solución correcta. Simplemente establece la columna en el texto “datetime (‘now’)”.

No puede usar la función de fecha y hora utilizando el envoltorio Java “Valores de contenido”. O puede usar:

  • SQLiteDatabase.execSQL para que pueda ingresar una consulta SQL sin procesar.

     mDb.execSQL("INSERT INTO "+DATABASE_TABLE+" VALUES (null, datetime()) "); 
  • O las capacidades de fecha y hora java:

     // set the format to sql date time SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(); ContentValues initialValues = new ContentValues(); initialValues.put("date_created", dateFormat.format(date)); long rowId = mDb.insert(DATABASE_TABLE, null, initialValues); 

En mi código, uso DATETIME DEFAULT CURRENT_TIMESTAMP como el tipo y la restricción de la columna.

En su caso, la definición de su tabla sería

 create table notes ( _id integer primary key autoincrement, created_date date default CURRENT_DATE ) 

Método 1

 CURRENT_TIME – Inserts only time CURRENT_DATE – Inserts only date CURRENT_TIMESTAMP – Inserts both time and date CREATE TABLE users( id INTEGER PRIMARY KEY, username TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); 

Método 2

 db.execSQL("INSERT INTO users(username, created_at) VALUES('ravitamada', 'datetime()'"); 

Método 3 de 3: Usar las funciones de fecha de Java

 private String getDateTime() { SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss", Locale.getDefault()); Date date = new Date(); return dateFormat.format(date); } ContentValues values = new ContentValues(); values.put('username', 'ravitamada'); values.put('created_at', getDateTime()); // insert the row long id = db.insert('users', null, values); 

Hay un par de opciones que puede usar:

  1. Podría intentar usar la cadena “(DATETIME (‘now’))” en su lugar.
  2. Inserte la fecha y hora usted mismo, es decir, con System.currentTimeMillis ()
  3. Al crear la tabla SQLite, especifique un valor predeterminado para la columna created_date como la fecha actual.
  4. Use SQLiteDatabase.execSQL para insertar directamente.

Para mí, el problema parece ser que estás enviando "datetime('now')" como una cadena, en lugar de un valor.

Mi idea es encontrar una forma de tomar la fecha / hora actual y enviarla a su base de datos como un valor de fecha / hora, o encontrar una forma de usar el parámetro incorporado de SQLite (DATETIME('NOW'))

Eche un vistazo a los comentarios en esta pregunta de SO.com : pueden guiarlo en la dirección correcta.

¡Espero que esto ayude!

Puedes usar la función de java que es:

 ContentValues cv = new ContentValues(); cv.put(Constants.DATE, java.lang.System.currentTimeMillis()); 

De esta forma, en tu db guardas un número.
Este número podría interpretarse de esta manera:

  DateFormat dateF = DateFormat.getDateTimeInstance(); String data = dateF.format(new Date(l)); 

En lugar de l en una nueva Fecha (l), debe insertar el número en la columna de fecha.
Entonces, tienes tu cita.
Por ejemplo, guardo en mi db este número: 1332342462078
Pero cuando llamo al método anterior, tengo este resultado: 21-mar-2012 16.07.42

Basado en la respuesta de @e-satis, creé un método privado en mi clase “DBTools”, por lo que ahora es muy fácil agregar la fecha actual:

 ... import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; ... private String getNow(){ // set the format to sql date time SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(); return dateFormat.format(date); } ... 

Úselo ahora así: values.put("lastUpdate", getNow());

Funciona para mí perfecto:

  values.put(DBHelper.COLUMN_RECEIVEDATE, geo.getReceiveDate().getTime()); 

Guarde su fecha como un largo.

Este ejemplo de código puede hacer lo que desee:

http://androidcookbook.com/Recipe.seam?recipeId=413

Asegúrese de que el campo no esté marcado como ‘no nulo’ al mismo tiempo que intenta insertar una marca de tiempo predeterminada utilizando la expresión “(DATETIME (‘now’))”