Erreur dans sqlite "DROP TABLE IF EXISTS" android

Donc j'ai un problème dans ma classe DBAdapter est juste écrasant lorsque j'essaie d'ouvrir la base de données: à partir de LogCat, je suppose que le problème se trouve dans la fonction onUpgrade:

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w("SingleDBAdapter", "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS "+DATABASE_TABLE); onCreate(db); } } 

Voici l'erreur:

 07-28 11:32:49.443: E/Database(1244): Failure 1 (near "122": syntax error) on 0x2435b0 when preparing 'DROP TABLE IF EXISTS 122'. 07-28 11:32:49.463: D/AndroidRuntime(1244): Shutting down VM 07-28 11:32:49.463: W/dalvikvm(1244): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 07-28 11:32:49.473: E/AndroidRuntime(1244): FATAL EXCEPTION: main 07-28 11:32:49.473: E/AndroidRuntime(1244): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.shop.list/com.shop.list.main}: android.database.sqlite.SQLiteException: near "122": syntax error: **DROP TABLE IF EXISTS 122** 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.os.Handler.dispatchMessage(Handler.java:99) 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.os.Looper.loop(Looper.java:123) 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.app.ActivityThread.main(ActivityThread.java:4627) 07-28 11:32:49.473: E/AndroidRuntime(1244): at java.lang.reflect.Method.invokeNative(Native Method) 07-28 11:32:49.473: E/AndroidRuntime(1244): at java.lang.reflect.Method.invoke(Method.java:521) 07-28 11:32:49.473: E/AndroidRuntime(1244): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 07-28 11:32:49.473: E/AndroidRuntime(1244): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 07-28 11:32:49.473: E/AndroidRuntime(1244): at dalvik.system.NativeStart.main(Native Method) 07-28 11:32:49.473: E/AndroidRuntime(1244): Caused by: android.database.sqlite.SQLiteException: near "122": syntax error: DROP TABLE IF EXISTS 122 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method) 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1727) 07-28 11:32:49.473: E/AndroidRuntime(1244): at com.shop.list.ListDBAdapter$DatabaseHelper.onUpgrade(ListDBAdapter.java:51) 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:108) 07-28 11:32:49.473: E/AndroidRuntime(1244): at com.shop.list.ListDBAdapter.open(ListDBAdapter.java:60) 07-28 11:32:49.473: E/AndroidRuntime(1244): at com.shop.list.main.onCreate(main.java:60) 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 07-28 11:32:49.473: E/AndroidRuntime(1244): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 07-28 11:32:49.473: E/AndroidRuntime(1244): ... 11 more 

J'ai souligné le problème, mais je ne peux pas le résoudre: /

  • Sqlite Android Créez UN TABLE SI NOUS EXISTE
  • Stockage de données Android, Quand utiliser SqlLite et quand utiliser JSON, Linq alternatives
  • Recherche avec les Fragments avec Android
  • Synchroniser SQLite DB sur l'application Android avec la base de données MySQL de distance
  • Date de saisie à partir de la base de données Sqlite dans Android
  • Android - Base de données avec ContentValue avec bug booléen?
  • Comment récupérer le format DATETIME à partir de la base de données Sqlite
  • Requête de mise à jour de base de données SQLite avec plusieurs conditions dans Android
  • 6 Solutions collect form web for “Erreur dans sqlite "DROP TABLE IF EXISTS" android”

    Le problème semble être avec cette déclaration:

     DROP TABLE IF EXISTS 122 

    122 , si c'est vraiment le nom de la table à déposer, n'est pas délimité (avec ' , par exemple) et ne peut donc pas être traité comme un nom. Mais l'analyseur attend un nom ici. Il suffit de joindre le nom en guillemets simples ou doux, et cela devrait fonctionner:

     db.execSQL("DROP TABLE IF EXISTS ' " + DATABASE_TABLE + "'" ); 

    Si le nom de la table était tous des caractères alpha, votre code original aurait fonctionné. Étant donné que le nom de la table n'est pas tout alpha, il doit être entouré de guillemets simples.

    Je pense que vous manquez un ';' À la fin de votre instruction SQL

    Au-delà, je viens de vérifier sur une console sqlite3, semble-t-il, que "122" est un nom de table invalide:

     sqlite> drop table if exists 122; Error: near "122": syntax error sqlite> drop table if exists test; sqlite> 

    Db = Ceci est votre classe de gestionnaire de base de données

     db.execSQL("DROP TABLE IF EXISTS YourTableName"); 

    Bonjour, pense que vous devriez utiliser l'appel de la déclaration: "context.deleteDatabase (DATABASE_NAME);"

    Avant l'appel de "onCreate ();"

     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w("SingleDBAdapter", "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); context.deleteDatabase(DATABASE_NAME); onCreate(db); } } 

    Vous devriez changer votre:

     db.execSQL("DROP TABLE IF EXISTS "+DATABASE_TABLE); 

    avec:

     db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE + ";"); 

    Aussi, vous devez vérifier si newVersion> oldVersion

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.