2016-07-20 5 views
0

안드로이드 리소스를 인터넷에서 검색하는 DB 어댑터를 찾았습니다. 현재 데이터베이스에 위치와 같은 정보를 저장하려고합니다. 나는 그것을 작동시키지 만, 컬럼을 더 추가하려고하면 "컬럼이 존재하지 않는다"와 같은 오류가 발생합니다. 그래서 내 질문은, 어떻게 내가 데이터베이스를 삭제하고 이러한 새로운 열로 다시 만들 수 있습니까? 여기안드로이드 SQL 라이트 DB 어댑터 업데이트 DB

// ------------------------------------ DBADapter.java --------------------------------------------- 

// TODO: Change the package to match your project. 
package biz.tanners.geo_x; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 


// TO USE: 
// Change the package (at top) to match your project. 
// Search for "TODO", and make the appropriate changes. 
public class DBAdapter { 

    ///////////////////////////////////////////////////////////////////// 
    // Constants & Data 
    ///////////////////////////////////////////////////////////////////// 
    // For logging: 
    private static final String TAG = "DBAdapter2"; 

    // DB Fields 
    public static final String KEY_ROWID = "_id"; 
    public static final int COL_ROWID = 0; 
    /* 
    * CHANGE 1: 
    */ 
    // TODO: Setup your fields here: 
    public static final String KEY_NAME = "name"; 
    public static final String KEY_LONGITUDE = "longitude"; 
    public static final String KEY_LATTITUDE = "lattitude"; 
    public static final String KEY_STAMP = "stamp"; 

    // TODO: Setup your field numbers here (0 = KEY_ROWID, 1=...) 
    public static final int COL_NAME = 1; 
    public static final int COL_LONGITUDE= 2; 
    public static final int COL_LATTITUDE = 3; 
    public static final int COL_STAMP = 4; 


    public static final String[] ALL_KEYS = new String[] {KEY_ROWID, KEY_NAME, KEY_LONGITUDE, KEY_LATTITUDE, KEY_STAMP}; 
    public static final String DATABASE_NAME = "MyDb"; 
    public static final String DATABASE_TABLE = "mainTable"; 
    public static final int DATABASE_VERSION = 4; 

    private static final String DATABASE_CREATE_SQL = 
      "create table " + DATABASE_TABLE 
      + " (" + KEY_ROWID + " integer primary key autoincrement, " 

      /* 
      * CHANGE 2: 
      */ 
      // TODO: Place your fields here! 
      // + KEY_{...} + " {type} not null" 
      // - Key is the column name you created above. 
      // - {type} is one of: text, integer, real, blob 
      //  (http://www.sqlite.org/datatype3.html) 
      // - "not null" means it is a required field (must be given a value). 
      // NOTE: All must be comma separated (end of line!) Last one must have NO comma!! 
      + KEY_NAME + " text not null, " 
      + KEY_LONGITUDE + " double not null, " 
      + KEY_LATTITUDE + " double not null, " + KEY_STAMP + " text not null" 

      // Rest of creation: 
      + ");"; 

    // Context of application who uses us. 
    private final Context context; 

    private DatabaseHelper myDBHelper; 
    private SQLiteDatabase db; 

    ///////////////////////////////////////////////////////////////////// 
    // Public methods: 
    ///////////////////////////////////////////////////////////////////// 

    public DBAdapter(Context ctx) { 
     this.context = ctx; 
     myDBHelper = new DatabaseHelper(context); 
    } 

    // Open the database connection. 
    public DBAdapter open() { 
     db = myDBHelper.getWritableDatabase(); 
     return this; 
    } 

    // Close the database connection. 
    public void close() { 
     myDBHelper.close(); 
    } 

    // Add a new set of values to the database. 
    public long insertRow(String name, double longitude, double lattitude, String stamp) { 
     /* 
     * CHANGE 3: 
     */  
     // TODO: Update data in the row with new fields. 
     // TODO: Also change the function's arguments to be what you need! 
     // Create row's data: 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(KEY_NAME, name); 
     initialValues.put(KEY_LONGITUDE, longitude); 
     initialValues.put(KEY_LATTITUDE, lattitude); 
     initialValues.put(KEY_STAMP, stamp); 

     // Insert it into the database. 
     return db.insert(DATABASE_TABLE, null, initialValues); 
    } 

    // Delete a row from the database, by rowId (primary key) 
    public boolean deleteRow(long rowId) { 
     String where = KEY_ROWID + "=" + rowId; 
     return db.delete(DATABASE_TABLE, where, null) != 0; 
    } 

    public void deleteAll() { 
     Cursor c = getAllRows(); 
     long rowId = c.getColumnIndexOrThrow(KEY_ROWID); 
     if (c.moveToFirst()) { 
      do { 
       deleteRow(c.getLong((int) rowId));    
      } while (c.moveToNext()); 
     } 
     c.close(); 
    } 

    // Return all data in the database. 
    public Cursor getAllRows() { 
     String where = null; 
     Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS, 
          where, null, null, null, null, null, null); 
     if (c != null) { 
      c.moveToFirst(); 
     } 
     return c; 
    } 

    // Get a specific row (by rowId) 
    public Cursor getRow(long rowId) { 
     String where = KEY_ROWID + "=" + rowId; 
     Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS, 
         where, null, null, null, null, null, null); 
     if (c != null) { 
      c.moveToFirst(); 
     } 
     return c; 
    } 

    // Change an existing row to be equal to new data. 
    public boolean updateRow(long rowId, String name, double longitude, double lattitude, String stamp) { 
     String where = KEY_ROWID + "=" + rowId; 

     /* 
     * CHANGE 4: 
     */ 
     // TODO: Update data in the row with new fields. 
     // TODO: Also change the function's arguments to be what you need! 
     // Create row's data: 
     ContentValues newValues = new ContentValues(); 
     newValues.put(KEY_NAME, name); 
     newValues.put(KEY_LONGITUDE, longitude); 
     newValues.put(KEY_LATTITUDE, lattitude); 
     newValues.put(KEY_STAMP, stamp); 

     // Insert it into the database. 
     return db.update(DATABASE_TABLE, newValues, where, null) != 0; 
    } 
    private static class DatabaseHelper extends SQLiteOpenHelper 
    { 
     DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase _db) { 
      _db.execSQL(DATABASE_CREATE_SQL);   
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) { 
      Log.w(TAG, "Upgrading application's database from version " + oldVersion 
        + " to " + newVersion + ", which will destroy all old data!"); 

      // Destroy old database: 
      _db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 

      // Recreate new database: 
      onCreate(_db); 
     } 
    } 
} 

                  Error Code : 1 (SQLITE_ERROR) 
                  Caused By : SQL(query) error or missing database. 
                  (no such column: stamp (code 1): , while compiling: SELECT DISTINCT _id, name, longitude, lattitude, stamp FROM mainTable2) 
+0

실행하기 전에 데이터베이스 버전을 증가 시켰습니까? –

답변

1

오전 당신은 내가 이해로 답변을주고 ... 나는 "스탬프"문자열을 추가 할 때까지 내 코드는, 모든 일이다. 드롭 테이블 쿼리를 만들고 해당 테이블을 삭제해야 할 때 호출 할 수 있으며 해당 테이블을 만들 때마다 테이블 쿼리를 만들 수 있습니다.