2014-02-17 4 views
8

Имеет небольшую проблему с созданием новых таблиц. Когда я использую команду CREATE TABLE, мои новые таблицы формируются так, как должны, но когда я выхожу из действия, приложение падает, и я получаю TABLE УЖЕ СУЩЕСТВУЮЩИХ в logcat. Если я использую CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ, новая таблица не формируется, а просто добавляет мои новые строки данных в предыдущую таблицу, и это не сбой. Что не так с этим? Я хотел бы добавить таблицу, не давая мне уже существовать, и я бы хотел, чтобы она добавлялась без добавления строк в другую таблицу.android sqlite CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ

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); 
} 

} 

ответ

28

Вот как это должно работать. CREATE TABLE выдаст исключение, если таблица уже существует. CREATE TABLE IF NOT EXISTS создаст таблицу, если она не существует, или проигнорируйте эту команду, если это произойдет. Если вы хотите удалить старую таблицу, используйте DELETE TABLE IF EXISTS до CREATE TABLE. Если вы хотите изменить схему, используйте ALTER TABLE, а не CREATE TABLE.

+0

Я не понимаю, почему CREATE TABLE IF NOT EXISTS является добавление строк в предыдущей таблице. – johnsonjp34

+0

Это не так, но если у вас есть код, который добавит строку, он добавит его в существующую таблицу - CREATE IF NOT EXISTS не удалит старые данные. –

-1

Я использую это так:

internal static int checkTable() 
    { 
     DataTable dTable = new DataTable(); 
     try 
     { 
      dbConn = new SQLiteConnection("Data Source=" + dbFileName + ";Version=3;"); 
      dbConn.Open(); 
      sqlCmd.Connection = dbConn; 

      String makeTable = "CREATE TABLE IF NOT EXISTS responde(id INTEGER PRIMARY KEY AUTOINCREMENT, sid TEXT, ans TEXT, answe TEXT, questid TEXT, timestamp TEXT)"; 

      sqlCmd.CommandText = makeTable; 
      sqlCmd.ExecuteNonQuery(); 
      return 1; 
     } 
     catch (SQLiteException) { Console.WriteLine("Error DB 100"); return 0; } 
     catch (IndexOutOfRangeException) { Console.WriteLine("Error DB 101"); return 0; } 
     catch (TypeInitializationException) { Console.WriteLine("Error DB 102"); return 0; } 
    } 
Смежные вопросы