2014-02-17 2 views
8

새 테이블을 만드는 데 약간의 문제가 있습니다. CREATE TABLE 명령을 사용할 때 새로운 테이블이 있어야하지만, 활동을 종료하면 응용 프로그램이 충돌하고 logcat에 테이블이 이미 존재합니다. 기존 테이블이 존재하지 않는다면 CREATE TABLE을 사용하면 새로운 테이블이 형성되지 않고 새로운 테이블을 이전 테이블에 추가하기 만하면 충돌이 발생하지 않습니다. 이게 뭐가 잘못 되었 니? 나에게 이미 존재하는 그것을 제공하지 않고 테이블을 추가하고 싶습니다 그리고 다른 테이블에 행을 추가하지 않고 그것을 추가하고 싶습니다.android sqlite 존재하지 않는 테이블 만들기

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 테이블이 없으면 테이블을 만들거나 테이블이 있으면 테이블을 무시합니다. 이전 테이블을 삭제하려면 CREATE TABLE 앞에 DELETE TABLE IF EXISTS을 사용하십시오. 스키마를 변경하려면 CREATE TABLE이 아니라 ALTER TABLE을 사용하십시오.

+0

내가하지 이전 테이블에 행을 추가하고있는 경우 왜 CREATE TABLE을 이해하지 않습니다. – johnsonjp34

+0

하지만 행을 추가하는 코드가 있으면 기존 테이블에 추가됩니다. 존재하지 않으면 CREATE는 이전 데이터를 삭제하지 않습니다. –

-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; } 
    } 
관련 문제