Insérer une variable date dans un enregistrement

Résolu/Fermé
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 - 29 nov. 2020 à 18:47
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 - 7 déc. 2020 à 13:59
Bonjour,

J'essaye en vain d'insérer une variable date courante dans un champ de ma colonne DATE de ma base de données SQLite avec android studio.

J'ai récupéré le format de la date actuelle et je l'ai affiché dans un textView là ça fonctionne sans problème.

J'ai initialisé une variable avec ce format de date et je n'arrive pas à l'insérer dans ma BDD dans la colonne DATE.

Ci-dessous mes extraits de code

 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;


Tout ceci aucun problème ma date s'affiche sur le smart.

maintenant la partie de code que je n'arrive pas à résoudre en voilà l'extrait

 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
A voir également:

6 réponses

BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
Modifié le 3 déc. 2020 à 08:51
Hello,

Pour récupérer un enregistrement de la base, j'utilise la méthode
db.query()
.
Exemple :

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


Dans selection, je mets ma requête, genre
"ID = ?"

et dans selectionsArgs, je mets mes arguments, genre
new String[]{"" + id}

2
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 7
Modifié le 5 déc. 2020 à 22:10
Bonsoir,

Tout d’abord mes excuses pour mes dérangements.

C'est impardonnable on arrête de se torturer les méninges !!!

Voila ce que tu m'as corrigé lors d'un message en réponse un peu plus haut:
 return db.rawQuery("SELECT ID   as _id, * FROM book_table WHERE DATE = '"+ varDateReport +"'" , null);


Je viens de le reprendre ce soir et quelle n'a été ma surprise, ce code m'affiche bel et bien les produits à la date courante.

Je me demande ce que j'ai pu faire comme connerie ?
La date de naissance n'arrange pas les choses !!!

L'objectif est atteint lorsque l'activité s'ouvre elle affiche les produits à retirer du congelateur à partir de ce jour NOW.

Je te remercie mille fois pour ton aide qui a donnée forme à mon projet.

Dès que l'appli est finalisée je t’envoie l'APK.

Très cordialement à +++

rapidegoyes
1
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 7
29 nov. 2020 à 21:35
bonsoir

J'ai changer une ligne dont voici l'extrait:

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


Lors de la compilation aucune erreur ne se manifeste, c'est lorsque j'ouvre la page en question que l'appli s'arrête.

Bizarre lorsque je recule d'une page l'appli continue de fonctionner concernant les autres commandes.

a +++
rapidegoyes
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
29 nov. 2020 à 22:24
Bonjour

A mon avis
SELECT ID   as _id, book_table.* FROM book_table "

0
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 7
30 nov. 2020 à 20:36
Bonsoir ,
Merci de me répondre

Ce que tu me proposes ne marche pas

Voila mon code que j'ai déjà essayé, il fonctionne mais je n'arrive pas à insérer ma variable
initialisée avec la date système du jour.

ci-dessous mon code

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


Avec cela je réussis à afficher toutes mes données, ce que je cherche c'est simplement d'afficher une ligne avec la date actuelle du jour.

Pour réussir il faudrait que je puisse insérer ma variable date dans cette requête, malheureusement je n'y parvient pas.

Si tu as une autre idée je suis preneur.

a +++ cordialement

rapidegoyes
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
30 nov. 2020 à 20:41
Oh purée.... j'avais mal lu ta requête...

Donc tu voudrais "filtrer" sur cette variable ?
Tu as oublié de mettre un WHERE dans ta requête.
0
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 7
Modifié le 30 nov. 2020 à 22:47
Bonsoir,

Effectivement mon objectif c'est de filtrer les données avec cette date "now"

Si, j'avais déjà ajouter WHERE avec plusieurs essais.

Mais hélas rien ne fonctionne, ce qui est bizarre à la compilation aucune erreur, comme dit plus haut , lorsque je veux afficher cette activité l'appli s'arrête.

Aucun message d'erreur nulle part !!!

Elle s'arrête uniquement pour l'activité en question et je peux continuer sur les autre vues sans problème.

Voici mon essai

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


Cela fait maintenant au moins 12 heures que je cherche avec essais dans tous les sens mais rien !!!

Maintenant attention si je mets une date là ça y est le trie ce fait et les lignes comportant cette date apparaissent.

exemple du code d'essai:

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


Donc j'ai un problème pour insérer la variable pourtant elle existe et elle est bien initialisée !

A l'aide merci

cordialement rapidegoyes ou rapidegoNO !!!
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023
30 nov. 2020 à 22:51
mavariable doit se trouver entre quotes
0
rapidegoyes > rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023
30 nov. 2020 à 23:51
J'ai essayé si je place la variable entre quotes ça ne plante plus mais je n'ai pas d'affichage le trie est null

a plus rapidegoyes
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > rapidegoyes
30 nov. 2020 à 23:53
Entre quotes... mais également en la concaténant avec le reste de la chaine...

Un truc du style
return db.rawQuery("SELECT ID   as _id, * FROM book_table WHERE DATE = '"+ mavariable +"'" , null);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 7
Modifié le 2 déc. 2020 à 22:37
Bonsoir,

J'ai essayé ci-dessus mais rien à faire j'ai du rouge partout.

Je m’explique:

Je cherche à faire un trie des produits par dates.

Avec la méthode suivante en utilisant la même variable il m'est possible de modifier des dates
ci-dessous.
    public void daterep(long id){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues dater = new ContentValues();
dater.put("DATE", varDateReport); //appel de la variable varChange pour obtenir sa valeur
db.update("book_table", dater, "id = ? ", new String[]{Integer.toString((int) id)});//par click sur une ligne
db.close();//ferme la BDD
}



Maintenant mon problème:
Avec la méthode suivante en utilisant la même variable il m'est impossible de trier les dates.
Aucune erreurs, l'activité s'affiche mais vide .
J'en déduis que ma variable n'est pas prise en compte !

ci-dessous:
    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 WHERE DATE = \"" + dater + "\"", null);
}


Un autre essai avec une date entre guillemets, là le trie se fait et les données s'affichent !
ci-dessous:
return db.rawQuery("SELECT ID   as _id, * FROM book_table WHERE DATE = '2020-12-02' " , null);


Mais mon objectif est d'avoir le trie sur la date du jour automatiquement.

En espérant avoir bien explicité mon problème.
Merci d'être à mon écoute

cordialement à +++
rapidegoyes
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
3 déc. 2020 à 09:02
Ah mon avis, ce n'est pas la variable qui coince, mais la méthode. Dans le 1er cas, tu utilises bien le param selection, mais pas dans le 2nd. Si j'essaie de transposer ta requête avec la méthode query(), ça donne un truc comme ça :
// Paramètres de la requête
String tableName = "TA_TABLE";  // le nom de ta table
String columns = null;  // 'null' pour récupérer toutes les colonnes, sinon, il faut new String[] {"column1", "column2"};
String selection = "DATE = ?";  // la clause WHERE
String[] args = new String[]{
    varDateReport
};  // les paramètres de la clause WHERE, une String par point d'interrogation au-dessus
String orderBy = "DATE DESC"; // le tri est fait directement dans la requête

// Requête
Cursor c = db.query(tableName, columns, selection, args, null, null, orderBy);


L'avantage de faire comme ceci est de ne pas s'occuper de l'échappement des caractères dans la requête SQL, c'est le système qui gère
0
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 7
Modifié le 3 déc. 2020 à 23:08
Bonsoir,

Merci pour ton retour; j'ai appliqué ton code.
Cette fois ci je n'ai plus d'erreur, nulle part.
Mais lorsque je lance l'activité en question mon appli se bloque avec affichage "Gest congel" s'est arrêté.

Voici la requête que j'ai rédigé:

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


Ai-je fait une erreur en recopiant ?

Voici toute la méthode:

    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;
}



Encore merci
A+++ cordialement

rapidegoyes
yes or no ?
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894
Modifié le 4 déc. 2020 à 08:52
Mais lorsque je lance l'activité en question mon appli se bloque avec affichage "Gest congel" s'est arrêté.
Dans ce genre de cas, il faut regarder les logs pour voir où cela crash...

Est-ce que
 varDateReport
est de type String ? Sinon, ça risque de planter ici
0
rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023 7 > BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024
Modifié le 4 déc. 2020 à 18:42
Bonsoir,

J'ai vraiment tout vérifié, aucune erreur nulle part ni dans les logs pour signaler le crash .

Ma variable est déclarée de type String ci-dessous:

    //déclaration variable de classe pour reporter dates
public static String varDateReport ;


Et voici l'ensemble du fichier 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; // déclaration de l'objet db

//déclaration de l'objet TextView
static TextView txtView;

//déclaration variable de classe pour reporter dates
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);//permet la modification par click sur ligne

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; //initialisation de la variable

Cursor data = db.selecte_Dates();

// création de l'objet 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'essaye de comprendre

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

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

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

Avec mes remerciements

cordialement
rapidegoyes
0
BunoCS Messages postés 15474 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 22 avril 2024 3 894 > rapidegoyes Messages postés 70 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 1 septembre 2023
7 déc. 2020 à 13:59
J'ai vraiment tout vérifié, aucune erreur nulle part ni dans les logs pour signaler le crash .
Tu as forcément un crash...Essaie d'exécuter en mode debug pas-à-pas avec des points d'arrêt
0