Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-sqlite.SQLiteException:没有这样的列:\u id_Android_Sqlite_Android Sqlite - Fatal编程技术网

Android-sqlite.SQLiteException:没有这样的列:\u id

Android-sqlite.SQLiteException:没有这样的列:\u id,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我尝试更改SQLite数据库的版本。我认为我做得不对。我的fetchAllMeds方法由于id列不一致而引发错误。我的updateData应该已经更新了我的SQLite。我想我错过了什么 public class DBAdapter { public static final String ROW_ID ="_id"; public static final String KEY_DRUGNAME = "drugname"; public static final String KEY_DOSE

我尝试更改SQLite数据库的版本。我认为我做得不对。我的fetchAllMeds方法由于id列不一致而引发错误。我的updateData应该已经更新了我的SQLite。我想我错过了什么

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;
}
}
以下是我的MedMain活动的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};
请代替

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


CursorAdapter
needs
\u id
列中的
Cursor
作为旁注,数据库升级通常会在数据结构升级时保留数据。想象一下,当你决定更新Play store中的应用程序时,如果你丢失了所有数据……pskink,你能给我提供另一个提示,告诉我如何制定添加_id列的语法吗?你是对的Lynn。我正在学习更新我的应用程序数据库的细节。似乎我在讨论如何进行更改、添加列以及同时保留数据的基本要素。sql语法:“选择某个列作为_id,…”,如果您对数据库进行任何更改,您必须卸载应用程序并重新安装(或删除数据库并创建新数据库),你有我可以阅读的参考资料吗?这样我就可以学习如何从android studio卸载我的应用程序了?
ROW_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," +