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 -
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
Todo esto no hay problema, mi fecha se muestra en el dispositivo.
ahora la parte de código que no logro resolver
rapidegoyes Configuration: Windows / Firefox 83.0
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
-
Hola,
Para recuperar un registro de la base, utilizo el métododb.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 ejemplonew 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... -
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 -
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 -
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-
-
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 !!! -
-
-
-
-
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-
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
-
-
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?-
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...
¿EsvarDateReport
de tipo String? Si no, podría fallar aquí- 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
-