web-dev-qa-db-fra.com

"Aucune table de ce type" Erreur trouvée dans SQLite Android

J'essaie d'en apprendre davantage sur les bases de données SQLite, mais je déteste vraiment traiter avec des problèmes d'arrière-plan, avec passion. Je frappe déjà les murs avec un problème apparemment simple.

Voici le code qui, selon moi, compte dans la classe DatabaseHelper

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "Library";

    public static final String TABLE_NAME = "books";
    public static final String TITLE = "title";
    public static final String AUTHOR = "author";
    public static final String ISBN = "isbn";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, author TEXT, isbn TEXT)");
    }


    public boolean insertBook(String title, String author, String isdn) {

        try {
            SQLiteDatabase db = getWritableDatabase();

            ContentValues cv = new ContentValues();
            cv.put(TITLE, title);
            cv.put(AUTHOR, author);
            cv.put(ISBN, isdn);

            db.insert(TABLE_NAME, null, cv);
            db.close();

            return true;
        } catch (Exception exp) {
            exp.printStackTrace();

            return false;
        }
    }
}

Et c'est le code de mon activité principale

dbHelper = new DatabaseHelper(this);

dbHelper.insertBook("Harry Potter", "JK", "1000");
dbHelper.insertBook("Hamlet", "Shakespeare", "500");

Eclipse me dit qu'il y a une erreur dans la méthode insertBook(). Il dit qu'il y a no such table books: .... Je n'ai aucune idée de ce que je fais mal ici. Ce qui le rend plus frustrant, c’est que seulement quelques minutes avant que tout fonctionne parfaitement, alors (je pense) j’ai laissé tomber le tableau et le crée à nouveau pour une raison quelconque, même si ce code n’a pas changé depuis ma première création ( Je pense...).

11
Mark D

Il existe une ancienne version de la base de données sur votre appareil, qui contient la base de données (vide), mais pas la table des livres. Si c'est une option pour vous, désinstallez et réinstallez l'application.

Plus tard, lorsque vous souhaitez ajouter une nouvelle table à la base de données pendant la production sur les machines des utilisateurs finaux, tout en conservant les données existantes, le hook désigné pour ajouter de nouvelles tables, modifier le schéma ou mettre à niveau vos données est la méthode onUpgrade de votre SQLiteOpenHelper .

38

J'ai écrit un cadre ORM pour cela. https://github.com/ahmetalpbalkan/orman

Vous pouvez facilement écrire des applications Android en utilisant SQLite avec cela. Il utilise vos classes Java (Book, dans ce cas) comme tables de base de données (entités).

Il crée même votre table automatiquement et vous dites simplement book1.insert(), done.

5
AhmetB - Google

Vous devez désinstaller l'application, puis la réinstaller. Il devrait marcher après ça.

2
Faraz Ahmed

essayez celui-ci par exemple pour insérer:

 public boolean insertBook(String title, String author, String isdn) {

        try {
            SQLiteDatabase db = getWritableDatabase();

            ContentValues cv = new ContentValues();
            cv.put(TITLE, title);
            cv.put(AUTHOR, author);
            cv.put(ISBN, isdn);

            ***try
             {
            db.insert(TABLE_NAME, null, cv);
}
 catch ( SQLiteException e)
        {
            onCreate(db);
  db.insert(TABLE_NAME, null, cv);
}***

            db.close();

            return true;
        } catch (Exception exp) {
            exp.printStackTrace();

            return false;
        }
    }
1
Ali Ziaee

Si, pour une raison quelconque, vous avez supprimé la table, vous souhaiterez peut-être supprimer la base de données pour forcer l'application à la recréer correctement. Utilisez adb Shell et recherchez la base de données dans /data/data/[package_name]/databases/. Vous pouvez simplement supprimer le fichier.

0
Matthieu

Assurez-vous que la méthode onCreate a été appelée. Je suis également confronté à un type de problème similaire lors de la création de plusieurs tables. Si vous créez une classe distincte, assurez-vous d'abord de supprimer toutes les données de stockage de votre application, puis de l'exécuter à nouveau. Cela fonctionnera parfaitement pour moi.

0
Manish Bansal

J'ai eu ce problème, mais le nettoyage du projet ne l'a pas résolu.
Il s’est avéré que j’ai passé DATABASE_NAME au lieu de TABLE_NAME.

0
Destiner