Android-sqlite.SQLiteException:没有这样的列:\u id
我尝试更改SQLite数据库的版本。我认为我做得不对。我的fetchAllMeds方法由于id列不一致而引发错误。我的updateData应该已经更新了我的SQLite。我想我错过了什么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
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," +