Insertar una variable de fecha en un registro

Resuelto
rapidegoyes Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención   -  
BunoCS Mensajes publicados 5034 Fecha de registro   Estado Moderador Última intervención   -
Hola, Estoy intentando infructuosamente insertar una variable de fecha actual en un campo de mi columna DATE de mi base de datos SQLite con Android Studio. He obtenido el formato de la fecha actual y lo he mostrado en un TextView; eso funciona sin problema. He inicializado una variable con este formato de fecha y no logro insertarla en mi BD en la columna DATE. A continuación mis fragmentos de código
 Calendar c = Calendar.getInstance();

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String formatteDate = df.format(c.getTime());
// formattedDate have current date
// Toast.makeText((this), formatteDate,Toast.LENGTH_LONG).show();

// maintenant on affiche formattedDate value dans TextView
txtView.setText(" Date courante du jour :" + formatteDate);
txtView.setTextSize(20);

varDateReport = formatteDate;

Todo esto no hay problema, mi fecha se muestra en el dispositivo.
ahora la parte de código que no logro resolver
 public Cursor selecte_Dates(){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues dater = new ContentValues();
dater.put("DATE",varDateReport);//appel de la variable varDateReport pour obtenir sa valeur
return db.rawQuery("SELECT ID as _id, * FROM book_table" + dater, null);
}
Merci pour votre aide cordialement à +++
rapidegoyes Configuration: Windows / Firefox 83.0

6 respuestas

  1. BunoCS Mensajes publicados 5034 Fecha de registro   Estado Moderador Última intervención   3 930
     
    Hola,

    Para recuperar un registro de la base, utilizo el método
    db.query()
    .
    Ejemplo:

    final Cursor cursor = db.query(tableName, null, selection, selectionArgs, groupBy, having, orderBy, limit);


    En selection, pongo mi consulta, por ejemplo
    "ID = ?"

    y en selectionsArgs, pongo mis argumentos, por ejemplo
    new String[]{"" + id}

    @+ 
    Buno, Moderador 
    La urgencia está hecha, lo imposible está en curso. Para los milagros, prever un retraso...
    The urgent is done, the impossible is underway. For miracles, provide for a delay...
    2
  2. rapidegoyes Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención   13
     
    Buenas noches,

    Primero, mis disculpas por las molestias.

    ¡Es imperdonable dejar de torturarnos la mente!!!

    Esto es lo que me corrigiste en un mensaje anterior:
     return db.rawQuery("SELECT ID as _id, * FROM book_table WHERE DATE = '"+ varDateReport +"'" , null);


    Acabo de retomarlo esta noche y cuál fue mi sorpresa, este código de hecho me muestra los productos de la fecha actual.

    Me pregunto qué estuve haciendo mal. ¡La fecha de nacimiento no facilita las cosas!

    El objetivo se alcanza cuando la actividad se abre y muestra los productos a retirar del congelador a partir de este día NOW.

    Te agradezco mil veces por tu ayuda que ha dado forma a mi proyecto.

    Tan pronto como la app esté finalizada te envío el APK.

    Muy cordialmente, a +++

    rapidegoyes
    1
  3. rapidegoyes Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención   13
     
    Buenas noches

    He cambiado una línea cuyo extracto es:

    return db.rawQuery("SELECT ID as _id, * FROM book_table " + dater.toString(), null);

    Al compilar no aparece ningún error, es cuando abro la página en cuestión que la aplicación se detiene.

    Es extraño, cuando regreso una página, la aplicación continúa funcionando para las demás órdenes.

    a +++
    rapidegoyes
    0
    1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
       
      Bonjour

      À mon avis
       SELECT ID as _id, book_table.* FROM book_table " 
      0
  4. rapidegoyes Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención   13
     
    Buenas noches,
    Gracias por responderme

    Lo que me propones no funciona

    Aquí está el código que ya he probado, funciona pero no consigo insertar mi variable
    inicializada con la fecha del sistema del día.

    A continuación mi código

    return db.rawQuery("SELECT ID as _id, * FROM book_table " , null);


    Con esto logro mostrar todos mis datos, lo que busco es simplemente mostrar una línea con la fecha actual del día.

    Para lograrlo haría falta poder insertar mi variable fecha en esta consulta, desafortunadamente no lo consigo.

    Si tienes otra idea, la acepto.

    a +++ cordialidad

    rapidegoyes
    0
    1. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830
       
      Oh cúmple... había leído mal tu petición... Entonces, ¿quieres "filtrar" en esta variable? Te has olvidado de poner un WHERE en tu consulta.
      0
    2. rapidegoyes Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención   13
       
      Buenas noches, De hecho, mi objetivo es filtrar los datos con esta fecha "now". Si, ya había añadido WHERE con varios intentos. Pero, lamentablemente, nada funciona, lo que es raro: al compilar no hay ningún error; como dije antes, cuando quiero mostrar esta actividad, la aplicación se detiene. Ningún mensaje de error en ningún lugar!!! Se detiene únicamente para la actividad en cuestión y puedo continuar en las otras vistas sin problema. Este es mi intento:
       return db.rawQuery("SELECT ID as _id, * FROM book_table WHERE DATE = mavariable" , null);
      Ya llevan al menos 12 horas buscando con pruebas en todos los sentidos, pero nada!!! Cuidado: si pongo una fecha ahí, ya sí se realiza el filtro y las filas que contienen esa fecha aparecen. ejemplo del código de prueba:
       return db.rawQuery("SELECT ID as _id, * FROM book_table WHERE DATE = '2020-12-04'" , null);
      Por lo tanto tengo un problema para insertar la variable, sin embargo existe y está bien inicializada! Agradezco la ayuda. Atentamente, rapidegoyes o rapidegoNO !!!
      0
    3. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830 > rapidegoyes Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención  
       
      mi_variable debe ir entre comillas
      0
    4. rapidegoyes > rapidegoyes Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención  
       
      Intento: si coloco la variable entre comillas, ya no falla, pero no tengo ninguna salida; el ordenación es null

      a plus rapidegoyes
      0
    5. jordane45 Mensajes publicados 30426 Fecha de registro   Estado Moderador Última intervención   4 830 > rapidegoyes
       
      Entre comillas... pero también concatenándola con el resto de la cadena...

      Un tipo de estilo
       return db.rawQuery("SELECT ID as _id, * FROM book_table WHERE DATE = '"+ mavariable +"'" , null); 
      0
  5. rapidegoyes Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención   13
     
    Buenas noches,

    Intenté lo anterior pero no funciona, tengo rojo por todas partes.

    Me explico:

    Busco hacer un filtro de productos por fechas.

    Con el siguiente método (usando la misma variable) es posible modificar las fechas a continuación.

    public void daterep(long id){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues dater = new ContentValues();
    dater.put("DATE", varDateReport); //llamada de la variable varDateReport para obtener su valor
    db.update("book_table", dater, "id = ? ", new String[]{Integer.toString((int) id)}); //al hacer clic en una fila
    db.close(); //cierra la BDD
    }

    Ahora mi problema:
    Con el siguiente método (usando la misma variable) es imposible ordenar las fechas.
    No hay errores, la actividad se muestra pero está vacía.
    Concluyo que mi variable no se toma en cuenta!

    public Cursor selecte_Dates(){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues dater = new ContentValues();
    dater.put("DATE", varDateReport); //llamada de la variable varDateReport para obtener su valor
    return db.rawQuery("SELECT ID as _id, * FROM book_table WHERE DATE = \"" + dater + "\"", null);
    }

    Otro intento con una fecha entre comillas, ahí el ordenado se realiza y se muestran los datos!

    return db.rawQuery("SELECT ID as _id, * FROM book_table WHERE DATE = '2020-12-02' " , null);

    Pero mi objetivo es tener el ordenamiento por la fecha del día automáticamente.

    Esperando haber explicado bien mi problema.

    Gracias por su atención

    cordialement à +++ rapidgoyes
    0
    1. BunoCS Mensajes publicados 5034 Fecha de registro   Estado Moderador Última intervención   3 930
       
      En mi opinión, no es la variable la que falla, sino el método. En el primer caso, usas bien el parámetro selection, pero no en el segundo. Si intento trasladar tu consulta con el método query(), sale algo así:
       // Parámetros de la consulta String tableName = "TA_TABLE"; // el nombre de tu tabla String columns = null; // 'null' para recuperar todas las columnas, si no, hay que new String[] {"column1", "column2"}; String selection = "DATE = ?"; // la cláusula WHERE String[] args = new String[]{ varDateReport }; // los parámetros de la cláusula WHERE, un String por cada signo de interrogación arriba String orderBy = "DATE DESC"; // el orden se realiza directamente en la consulta // Consulta Cursor c = db.query(tableName, columns, selection, args, null, null, orderBy); 


      La ventaja de hacer así es no preocuparse por el escape de caracteres en la consulta SQL, es el sistema el que gestiona
      0
  6. rapidegoyes Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención   13
     
    Buenas noches,

    Gracias por tu respuesta; he aplicado tu código.
    Esta vez no tengo más errores, en ningún lugar.
    Pero cuando ejecuto la actividad en cuestión mi app se bloquea con el mensaje “Gest congel” se ha detenido.

    Aquí está la consulta que redacté:

     Cursor c = db.query("book_table", null,"DATE = ?", new String[]{varDateReport}, null, null, "DATE DESC");
    return c;


    ¿He cometido un error al copiar?

    Aquí está toda la función:

     public Cursor selecte_Dates(){
    SQLiteDatabase db = this.getWritableDatabase();

    Cursor c = db.query("book_table", null,"DATE = ?", new String[]{varDateReport}, null, null, "DATE DESC");
    return c;
    }


    Gracias de nuevo
    A+++ atentamente

    rapidegoyes
    ¿sí o no?
    0
    1. BunoCS Mensajes publicados 5034 Fecha de registro   Estado Moderador Última intervención   3 930
       
      Pero cuando inicio la actividad en cuestión, mi aplicación se bloquea con el mensaje "Gest congel" se detuvo.
      En este tipo de casos, hay que revisar los registros para ver dónde se produce el fallo...

      ¿Es
       varDateReport
      de tipo String? Si no, podría fallar aquí
      0
      1. rapidegoyes Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención   13 > BunoCS Mensajes publicados 5034 Fecha de registro   Estado Moderador Última intervención  
         
        Buenas noches,

        He verificado realmente todo, ninguna error ni en los logs para señalar el fallo.

        Mi variable está declarada de tipo String a continuación:

         //declaración de variable de clase para reportar fechas
        public static String varDateReport ;


        Y aquí está el conjunto completo del archivo dates_Diverses.java

        package com.example.sqlitedatabase;

        import android.app.Activity;
        import android.app.AlertDialog;
        import android.content.Context;
        import android.content.DialogInterface;
        import android.database.Cursor;
        import android.os.Bundle;
        import android.view.Gravity;
        import android.view.View;
        import android.widget.AdapterView;
        import android.widget.ListView;
        import android.widget.SimpleCursorAdapter;
        import android.widget.TextView;
        import android.widget.Toast;
        import java.text.SimpleDateFormat;
        import java.util.Calendar;

        public class dates_Diverses extends Activity implements AdapterView.OnItemLongClickListener {
        SQLiteDataBaseHelper db; // declaración del objeto db

        //declaración del objeto TextView
        static TextView txtView;

        //declaración variable de clase para reportar fechas
        public static String varDateReport ;

        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dates_limites_diverses);

        db = new SQLiteDataBaseHelper(this);

        final ListView lv = this.findViewById(R.id.Fiche_liste);
        txtView = findViewById(R.id.txtView);

        //*************mise en page du toast********************
        Context context = getApplicationContext();
        CharSequence text = " Vérifier vos dates de fin de congélation ";
        int duration = Toast.LENGTH_SHORT;
        Toast toast = Toast.makeText(context, text, duration);
        toast.setGravity(Gravity.TOP|Gravity.LEFT, 40, 800);
        toast.show();

        lv.setOnItemLongClickListener(this);//permite la modificación al hacer clic en la fila

        Calendar c = Calendar.getInstance();

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        String formatteDate = df.format(c.getTime());
        // formattedDate tiene la fecha actual
        // Toast.makeText((this), formatteDate,Toast.LENGTH_LONG).show();



        // ahora mostramos el valor formattedDate en el TextView
        txtView.setText(" Date courante du jour :" + formatteDate);
        txtView.setTextSize(20);

        varDateReport = formatteDate; //inicialización de la variable

        Cursor data = db.selecte_Dates();

        // creación del objeto SimpleCursorAdapter...
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.row_item, data, new String[]
        {"TYPE", "NOM", "DATE", "NOMBRE", "ENDROIT"}, new int[]{R.id.textViewCol1, R.id.textViewCol2,
        R.id.textViewCol3, R.id.textViewCol4, R.id.textViewCol5});

        lv.setAdapter(adapter);

        } // fin de onCreate

        @Override

        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, final long id) {
        final AlertDialog.Builder modifAlert = new AlertDialog.Builder(this);
        modifAlert.setTitle("Vous pouvez modifier la date");
        modifAlert.setMessage("Date du jour !" );
        modifAlert.setPositiveButton("Date", null);
        modifAlert.setNegativeButton("Annuler", null);
        modifAlert.setPositiveButton("OK", new DialogInterface.OnClickListener()
        {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        db.daterep(id);
        Toast.makeText(getApplicationContext(), "OK la date est modifié", Toast.LENGTH_SHORT).show();
        }
        });

        modifAlert.create().show();
        return false;
        }


        }


        J’essaie de comprendre

        Est-ce que le format de date peut poser problème ?

        j’ai déclaré yyyy-MM-dd

        Ou est-ce cela: String formatteDate = df.format(c.getTime());

        Avec mes remerciements

        cordialement
        rapidegoyes
        0
      2. BunoCS Mensajes publicados 5034 Fecha de registro   Estado Moderador Última intervención   3 930 > rapidegoyes Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención  
         
        He verificado realmente todo, no hay ningún error en ninguna parte ni en los registros para señalar el fallo.
        Seguro que tienes un fallo... Intenta ejecutarlo en modo depuración paso a paso con puntos de interrupción.
        0