2016-11-02 4 views
-1

私のSQLiteデータベースのバージョンを変更しようとしました。私はこの権利をしているとは思わない。私のfetchAllMedsメソッドは、一貫していない_id列のためにエラーを投げています。私のupdateDataは自分のSQLiteを更新しているはずです。私は何かが足りないと思う。ここで Android - sqlite.SQLiteException:いいえそのような列:_id

public class DBAdapter { 
public static final String ROW_ID ="_id"; 
public static final String KEY_DRUGNAME = "drugname"; 
public static final String KEY_DOSE = "dose"; 
public static final String KEY_FREQUENCY = "frequency"; 
public static final String KEY_ROUTE = "route"; 
public static final String KEY_REFILLDATE = "refilldate"; 
public static final String KEY_EXPIRATIONDATE = "expirationdate"; 

private static final String DATABASE_NAME = "MymedlistDB"; 
private static final String DATABASE_TABLE = "mymedlist"; 
private static final int DATABASE_VERSION = 2; 

private static final String TAG = "MedDBAdapter"; 
private DatabaseHelper mDatabaseHelper; 
private SQLiteDatabase mDb; 

private final Context mCtx; 

private static final String DATABASE_CREATE = 
     "CREATE TABLE if not exists " + DATABASE_TABLE + " (" + 
       ROW_ID + "_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + 
       KEY_DRUGNAME + "," + 
       KEY_DOSE + "," + 
       KEY_FREQUENCY + "," + 
       KEY_ROUTE + "," + 
       KEY_REFILLDATE + "," + 
       KEY_EXPIRATIONDATE + ")"; 



private static class DatabaseHelper extends SQLiteOpenHelper { 
    public DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     Log.w(TAG, DATABASE_CREATE); 
     db.execSQL(DATABASE_CREATE); 
    } 

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

public DBAdapter(Context ctx){ 
    this.mCtx = ctx; 
} 

public DBAdapter open() throws SQLException{ 
    mDatabaseHelper = new DatabaseHelper(mCtx); 
    mDb = mDatabaseHelper.getWritableDatabase(); 
    return this; 
} 
public void close(){ 
    if (mDatabaseHelper != null){ 
     mDatabaseHelper.close(); 
    } 
} 
public long createMed(String drugname, String dose, String frequency, 
         String route, String refilldate, String expirationdate){ 

    ContentValues initialValues = new ContentValues(); 
    initialValues.put(KEY_DRUGNAME, drugname); 
    initialValues.put(KEY_DOSE, dose); 
    initialValues.put(KEY_FREQUENCY, frequency); 
    initialValues.put(KEY_ROUTE, route); 
    initialValues.put(KEY_REFILLDATE, refilldate); 
    initialValues.put(KEY_EXPIRATIONDATE, expirationdate); 

    return mDb.insert(DATABASE_TABLE, null, initialValues); 
} 

public int updateData(String drugname, String dose, String frequency, 
         String route, String refilldate, String expirationdate){ 
    ContentValues medsUpdate = new ContentValues(); 
    medsUpdate.put(DBAdapter.KEY_DRUGNAME,drugname); 
    medsUpdate.put(DBAdapter.KEY_DOSE,dose); 
    medsUpdate.put(DBAdapter.KEY_FREQUENCY,frequency); 
    medsUpdate.put(DBAdapter.KEY_ROUTE,route); 
    medsUpdate.put(DBAdapter.KEY_REFILLDATE,refilldate); 
    medsUpdate.put(DBAdapter.KEY_EXPIRATIONDATE,expirationdate); 
    int i = mDb.update(DBAdapter.DATABASE_TABLE, medsUpdate, DBAdapter.ROW_ID, null); 
    return i; 

} 

public Cursor fetchAllMeds(){ 
    String[] columns = new String[] {ROW_ID,KEY_DRUGNAME, KEY_DOSE, KEY_FREQUENCY, KEY_ROUTE, KEY_REFILLDATE, KEY_EXPIRATIONDATE}; 
    Cursor mCursor = mDb.query(DATABASE_TABLE,columns,ROW_ID, null, null, null, null, null); 

    if (mCursor != null){ 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 
} 
} 

は私MedMainActivityの私のfetchAllMed一部です:

Cursor cursor = dbcon.fetchAllMeds(); 
    String[] from = new String[]{DBAdapter.ROW_ID, DBAdapter.KEY_DRUGNAME, DBAdapter.KEY_DOSE, DBAdapter.KEY_FREQUENCY, DBAdapter.KEY_ROUTE, DBAdapter.KEY_REFILLDATE 
      , DBAdapter.KEY_EXPIRATIONDATE}; 
    int[] to = new int[]{R.id._id, R.id.drugName3, R.id.dose3, R.id.frequency3, R.id.route3, R.id.refillDate3, R.id.expirationDate3}; 
+1

' CursorAdapter'が必要で_id'列を試してみて'Cursor' – pskink

+0

補足として、da通常、データ構造のアップグレードが行われたときに、データを保存するために、通常、アップグレードは行われません。 Playストアからアプリを更新すると決めたときに、すべてのデータを失ったとしたら... –

+0

pskink、その_id列を追加する構文を作成する方法についての別のヒントを教えてください。 –

答えて

2

してください代わりに

ROW_ID + "_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + 

の `

ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + 
+0

あなたの提案をしましたか?まだそのエラーを投げます。 –

+2

データベースを変更した場合は、アプリケーションを削除して再インストール(またはデータベースを削除して新しいデータベースを作成)する必要があります.... – Opiatefuchs

+0

Opiatefuchs、私が読める参照がありますか?私のアンドロイドスタジオから? –

関連する問題