web-dev-qa-db-ja.com

android sqlite CREATE TABLE IF NOT EXISTS

新しいテーブルの作成に少し問題があります。 CREATE TABLEコマンドを使用すると、必要に応じて新しいテーブルが作成されますが、アクティビティを終了するとアプリがクラッシュし、logcatにTABLE ALREADY EXISTSが表示されます。 CREATE TABLE IF NOT EXISTSを使用すると、新しいテーブルは作成されませんが、新しいデータ行を前のテーブルに追加するだけでクラッシュしません。これの何が問題になっていますか?既に存在するものを提供せずにテーブルを追加したいと思います。別のテーブルに行を追加せずに追加したいと思います。

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

それが動作するはずです。テーブルが既に存在する場合、CREATE TABLEは例外をスローします。 CREATE TABLE IF NOT EXISTSは、テーブルが存在しない場合は作成し、存在する場合はコマンドを無視します。古いテーブルを削除する場合は、DELETE TABLE IF EXISTSの前にCREATE TABLEを使用します。スキーマを変更する場合は、ALTER TABLEではなく、CREATE TABLEを使用します。

34
Gabe Sechan