[Java + SQL] Tester que la base est vide

Répondre
Partager Rechercher
Bonsoir,

j'aurais besoin d'un coup de main. Pour les besoins d'un projet, j'ai besoin de tester si une base SQLite est vide. En fonction de la "réponse", différentes actions sont menées.

Je pensais faire une requête SQL basique et me ramener le résultat dans un curseur. Sauf que je ne sais pas comment traiter le curseur ensuite pour vérifier que le résultat soit 0/null/?

Le code :

Code:
public Cursor recupUtil()
    {
    	db = baseUtil.getWritableDatabase();
    	String query = "SELECT user_id, user_name, user_pwd " +
				" FROM " + baseUtil.TABLE_UTILISATEUR + 
				";";
    	
    	Cursor mCursor = ExecuteQuery(query, null);
    	 
    	return mCursor;
    }
et la façon dont je pensais le traiter :
Code:
Cursor curseur;
		db = new UtilisateurAdapter(getApplicationContext());
		
		try{
			curseur = db.recupUtil();
			
			if (curseur != null){
		        Toast.makeText(this,"Case if", Toast.LENGTH_LONG).show();

			}
			else {
				Toast.makeText(this,"Case else", Toast.LENGTH_LONG).show();

			}
Malheureusement, après plusieurs essais divers et variés, je tombe toujours sur le cas if {} donc le cas ou le curseur n'est pas "null".
Alors que ma base est vide !

Vous voyez une solution ? Une idée que je n'ai peut être pas encore testée ?

Merci
Citation :
Publié par Feldi
Code:
Cursor curseur;
boolean empty = true;

		db = new UtilisateurAdapter(getApplicationContext());
		
		try{
			curseur = db.recupUtil();
			while (curseur.next()) {
                           empty = false;
                        }

                        if( empty ) {
                         // Pas de résultat.
                        } 
                        else {
                         // Résultat(s). 
                        } 

                 }
?
Sans aucune garantie, j'aime pas le Java et je sors peut-être une énormité. Et pour couronner le tout, je n'ai pas testé.
Pour tester si une table est vide, je ferais plutôt un
Code:
show tables;
Sinon, il est normal que ton objet cursor ne soit pas null, puisque ta requête a fonctionné. Par contre il faut que tu testes que le nombre d'éléments retournés par la requête est 0 ; il doit y avoir une méthode pour ça dans ta classe Cursor.
Merci pour les réponses.
J'ai fait un mix de vos idées et apparemment ça semble fonctionner. Il faudra sûrement faire des tests plus poussés mais ça sent bon la.
La méthode moveToFirst() renvoie false si le curseur est null donc ça me semble pas mal.

Code:
Cursor curseur;
		boolean flag;
		db = new UtilisateurAdapter(getApplicationContext());
		try{
			curseur = db.recupUtil();
			flag = curseur.moveToFirst();
			
			if (flag){
		        Toast.makeText(this,"Case if", Toast.LENGTH_LONG).show();

			}
			else {
				Toast.makeText(this,"Case else", Toast.LENGTH_LONG).show();

			}
Merci de votre aide !
J'ai du mal à comprendre un truc, tu dis que tu veux voir si la base est vierge et tu fais une requête sur une table pour le vérifier. En faite tu veux savoir si la/les tables sont vierges?

Si tu veux voir si ta table est vierge tu peux faire un truc dans ce style:

Code:
int i=0;
Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/NomDeLaBase", "Login", "MotDePasse");
                            Statement instruction = connexion.createStatement();
                            ResultSet resultat = instruction.executeQuery(SELECT user_id, user_name, user_pwd " +
				" FROM " + baseUtil.TABLE_UTILISATEUR + 
				";";);
                           resultat.next;
                               String variable = resultat.getString(1); 
                           if(variable.trim().compareTo(null)==0) {
                                    Vide
                           }
                           else {
                                     pas vide
                          }
                            resultat.close();
Tu fais ta requête avec un resultset, tu décales la RS avec le.next et tu le fou dans une variable. Si ta variable est null c'est que c'était vide, sinon c'est que c'était plein.

par contre faut pas taper dans des champs vides, car sinon ta valeur peut être égal à "" et non nulle.

Je sais pas si c'est ce que tu voulais... En tout cas si tu veux juste voir si la base est vierge, show tables est le plus simple.

edit: J'ai posté un peu en retard!
Effectivement, deux possibilités:

Soit tu tentes de savoir si une table est vide et tu ferais mieux d'apprendre le sens des mots "table" et "base" avant de participer à un quelconque projet.

Soit tu tentes de savoir si une base est vide et ta méthode de tester sur une table en particulier ne vaut rien.
Si tu veux savoir si ta table est vide, utilise un SELECT count(user_id).
La, quand ta table aura plusieurs milliers d'entré, tu vas choper toute la table, donc une requête potentiellement grosse pour rien du tout.
Pourquoi parcourir toute une table alors que tu veux juste savoir si il y a une occurrence?

Il suffit d’initialiser un boolean a 0 puis de le renseigner avec le résultat de cette requête:

select 1 from TABLE_UTILISATEUR where rownum = 1 ;

Apres tu test ton boolean, si = 0 la table est vide sinon il y a quelque chose.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés