Comment puis-je vérifier si ma table sqlite contient des données?

EDIT, Modifié le code légèrement en fonction des réponses ci-dessous, mais ne l'ont toujours pas fonctionné. J'ai également ajouté un message de journal pour me dire si getCount était en train de revenir> 0, et c'est ainsi que je pense que quelque chose pourrait être incorrect avec ma requête? Ou mon utilisation du curseur …

J'ai créé une table, et je veux vérifier si elle est vide ou non, si elle est vide je veux exécuter des instructions d'insertion (qui sont stockées dans un tableau).

  • Autorisations sans duplication Manifest Android
  • Xamarin fichier de ressources Android introuvable
  • Obtenir une saveur de produit ou une variante de construction dans une application Android
  • Accès à la mémoire cache du media player
  • Performance de la mise en page de l'Android xml vs java
  • Libavcodec.so: a des déménagements de texte
  • Voici mon code, alors que je n'ai aucune erreur, lorsque je tire le fichier .db, je peux voir que cela ne fonctionne pas. Comment aborderiez-vous ce problème?

    public void onCreate(SQLiteDatabase db) { Log.i("DB onCreate", "Creating the database...");//log message db.execSQL(createCATBUDTAB); db.execSQL(createTWOWEETAB); try{ Cursor cur = db.rawQuery("SELECT COUNT(*) FROM CAT_BUD_TAB", null); if (cur.getCount() > 0){ Log.i("DB getCount", " getcount greater than 0");//log message //do nothing everything's as it should be } else{//put in these insert statements contained in the array Log.i("DB getCount", " getcount less than 0, should read array");//log message for(int i=0; i<13; i++){ db.execSQL(catInsertArray[i]); } } }catch(SQLiteException e){System.err.println("Exception @ rawQuery: " + e.getMessage());} } 

    Désolé, s'il s'agit d'une question ou d'une approche assez stupide, je suis nouveau dans tout cela. Des réponses très appréciées!

  • Orientation de l'écran de verrouillage (Android)
  • Comment afficher la barre de progression sur le Web?
  • Pourquoi mon échelle vectorielle n'est-elle pas comme prévu?
  • Traitement Android d'un côté ouvert?
  • Annotations Android: classe annotée Xyz_ ne pas trouver son original ("ne peut pas trouver la classe de symboles Xyz")
  • Existe-t-il un dépôt Android comme Cocoa Controls?
  • 11 Solutions collect form web for “Comment puis-je vérifier si ma table sqlite contient des données?”

    La requête SELECT COUNT(*) sur une table existante ne doit jamais retourner nulle. S'il n'y a pas de lignes dans le tableau, il doit renvoyer une ligne contenant la valeur zéro.

    À l'inverse, une ligne avec une valeur non nulle indique qu'elle n'est pas vide.

    Dans les deux cas, une ligne devrait être retournée, ce qui signifie qu'elle passera toujours par

     //do nothing everything's as it should be 

    section.

    Pour le réparer, laissez votre requête telle quelle (vous ne souhaitez pas select column_name simplement parce que cela serait inutile et peut-être un peu inefficace). Laissez-le en tant que select count(*) , qui renverra toujours une ligne et utilisera le code suivant (testé uniquement dans ma tête, alors faites attention):

     Cursor cur = db.rawQuery("SELECT COUNT(*) FROM CAT_BUD_TAB", null); if (cur != null) { cur.moveToFirst(); // Always one row returned. if (cur.getInt (0) == 0) { // Zero count means empty table. for (int i = 0; i < 13; i++) { db.execSQL (catInsertArray[i]); } } } 

    Le rawQuery renvoie un objet Cursor qui est positionné avant la première entrée (voir plus d'informations ici ) SELECT COUNT(*) renverra toujours un résultat (compte tenu du tableau existant)

    Je ferais donc:

     if (cur != null){ cur.moveToFirst(); if (cur.getInt(0) == 0) { // Empty } } 

    Comme l'a dit Paxdiablo, le curseur ne sera nulle. Ce que vous pouvez faire, c'est essayer comme ceci:

     if (cur != null && cur.getCount() > 0){ // do nothing, everything's as it should be } 

    MODIFIER

    En fait, j'avais utilisé le db.query () et cela a fonctionné pour moi. J'ai fait ça.

     cursor = db.query(TABLE_NAME, new String[] { KEY_TYPE }, null, null, null, null, null); if (cursor != null && cursor.getCount() > 0) { retVal = true; } 

    TABLE_NAME est ma table et KEY_TYPE était mon nom de colonne

    Vous voulez dire si c'est correct? J'ai essayé cela et pour moi c'est un travail

      dbCur = db.rawQuery("select * from player", null); Log.e("a", ""+dbCur.getCount()); 

    Il montrera la somme de la table, si la table n'a pas d'enregistrement, alors elle affichera 0.

    Vous pouvez le vérifier manuellement:

    1. Accédez à DDMS dans l'Explorateur de fichiers. /data/data/(your application package)/databases Vous obtiendrez ici votre fichier de base de données. Et si vous souhaitez voir les valeurs insérées dans le tableau.

    2. Copiez les adb , aapt , AdbWinApi.dll et AdbWinUsbApi.dll fichier platform_tools vers les outils.

    3. Ensuite, ouvrez l'invite de commandes et définissez votre chemin vers le répertoire "Outils" où votre configuration Android existe. Il ressemble à: – (Local Drive):\Android\android-sdk-windows\tools

    4. Après le chemin défini, vous écrivez la commande "AdB Shell" sans guillemets. E:\Developers\Android\android-sdk-windows\tools> adb shell

    5. Appuyez sur Entrée et écris le chemin du DDMS indiqué ci-dessus: – # sqlite3 /data/data/(Your Application Package)/databases/name of database

    6. Appuyez sur Entrée sqlite>.tables

    7. Appuyez sur Entrée et vous obtiendrez tout le nom de la table existant dans cette base de données.

     sqlite> Select * from table name 

    Toutes les données existent dans ce tableau montrera.

    Pour toute autre requête, n'hésitez pas à commenter.

    Ma façon de vérifier était quelque chose comme ceci:

     Cursor cursor = db.query(DbHelper.DB_NAME,DbHelper.DB_C_ID_ONLY,null,null,null,null,null); if(cursor.isAfterLast()) 

    Je reçois les entrées _id qui, dans mon cas, sont automatiquement incrémentées. Si la base de données est vide, isAfterLast sûrement vrai.

    Qu'en est-il de cette requête?

     SELECT CASE WHEN EXISTS (SELECT * FROM CAT_BUD_TAB) THEN 1 ELSE 0 END 

    C'est légèrement plus rapide que SELECT COUNT(*) .

    PS Checked on tables avec 9 millions de lignes.

    Une autre alternative à celle déjà mentionnée serait d'utiliser la fonction queryNumEntries de DatabaseUtils de classe.

    Un exemple peut être le suivant:

     public boolean checkEmpty(SQLiteDatabase db, String table){ return DatabaseUtils.queryNumEntries(db, table) == 0; } 

    Voici ce que j'ai fait …

     Cursor cur = db.rawQuery("SELECT count(*) FROM " + SQLHelper.TABLE_CART, null); if (cur != null && cur.moveToFirst() && cur.getInt(0) > 0) { Log.i(getClass().getName(), "table not empty"); } else { Log.i(getClass().getName(), "table is empty"); } 

    Mon application s'est écrasée en essayant les codes ci-dessus, alors j'ai fait cela et maintenant ça fonctionne parfaitement!

     public boolean checkIfEmpty() { Cursor cursor = getDatabase().query(DatabaseHelper.Products.TABLE, DatabaseHelper.Products.COLUMNS, null, null, null, null, null); if (cursor != null) { try { //if it is empty, returns true. cursor.moveToFirst(); if (cursor.getInt(0) == 0) return true; else return false; } //this error usually occurs when it is empty. So i return true as well. :) catch(CursorIndexOutOfBoundsException e) { return true; } } return false; } 

    Utilisez ceci:

     public Boolean doesRecordExist(String TableName, String ColumnName, String ColumnData) { String q = "Select * FROM "+TableName+" WHERE "+ColumnName+"='"+ColumnData+"';"; SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor = db.rawQuery(q, null); if (cursor.moveToFirst()) { return true; } else { return false; } } 


    Exemple

     if (doesRecordExist("student", "name", "John") == true) { //Do Something } else { //Do something } 

    Modifiez ceci en fonction de votre utilisation:

     String q = "Select * FROM "+TableName+" WHERE "+ColumnName+"='"+ColumnData+"';"; 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.