web-dev-qa-db-fra.com

android sqlite CREATE TABLE IF NOT EXISTS

Avoir un petit problème avec la création de nouvelles tables. Lorsque j'utilise la commande CREATE TABLE, mon nouveau tableau se forme comme il se doit, mais lorsque je quitte l'activité, l'application se bloque et j'obtiens un TABLE DÉJÀ EXISTANT dans le logcat. Si j'utilise CREATE TABLE IF NOT EXISTS, la nouvelle table n'est pas formée mais ajoute simplement mes nouvelles lignes de données à une table précédente et elle ne plante pas. Quel est le probleme avec ca? Je voudrais ajouter le tableau sans qu'il me donne déjà existe et je voudrais qu'il ajoute sans ajouter des lignes à un autre tableau.

Classe SqliteHelper:

public class MySQLiteHelper extends SQLiteOpenHelper {


public static final String TABLE_NAME = MainActivity.NameName;

public static final String COLUMN_ID = "_id";
public static final String COLUMN_COMMENT = "comment";
public static final String COLUMN_LAT = "lat";
public static final String COLUMN_LONG = "long";
public static final String COLUMN_RADI = "radi";
private static final String DATABASE_NAME = "spraylogs.db";
private static final int DATABASE_VERSION = 1;



public static final String NEWTABLE = "CREATE TABLE  "
         + TABLE_COMMENTS + "(" + COLUMN_ID
          + " integer primary key autoincrement, " + COLUMN_COMMENT
          + " text not null," + COLUMN_LAT+ ","  + COLUMN_LONG + "," + COLUMN_RADI +  ");";

public static final String SaveIt = "CREATE TABLE IF NOT EXISTS "
         + TABLE_COMMENTS + "(" + COLUMN_ID
          + " integer primary key autoincrement, " + COLUMN_COMMENT
          + " text not null," + COLUMN_LAT+ ","  + COLUMN_LONG + "," + COLUMN_RADI +  ");";



 MySQLiteHelper(Context context) {
  super(context, context.getExternalFilesDir(null).getAbsolutePath() + "/" + DATABASE_NAME, null, DATABASE_VERSION);
}


@Override
public void onCreate(SQLiteDatabase database) {
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(MySQLiteHelper.class.getName(),
    "Upgrading database from version " + oldVersion + " to "
        + newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + NEWTABLE);

onCreate(db);
 } 

} 
14
johnsonjp34

Voilà comment cela est censé fonctionner. CREATE TABLE lèvera une exception si la table existe déjà. CREATE TABLE IF NOT EXISTS créera la table si elle n'existe pas, ou ignorera la commande si elle existe. Si vous souhaitez qu'il supprime l'ancienne table, utilisez DELETE TABLE IF EXISTS avant CREATE TABLE. Si vous souhaitez modifier le schéma, utilisez ALTER TABLE, ne pas CREATE TABLE.

34
Gabe Sechan