我正在使用SQLiteDatabase
并且我遇到了一个奇怪的问题 - 当我尝试SELECT * FROM
表时,它给了我这个:
no such table: test_table (code 1): , while compiling: SELECT * FROM test_table
但是当我插入同一个表时,不会发送Exception
。
这是我的代码:
从表中获取所有数据的方法:
public List<Test> GetAllTests()
{
List<Test> tests =new ArrayList<Test>();
SQLiteDatabase db = this.getReadableDatabase();
String sql = "SELECT * FROM " + TEST_TABLE;
Cursor cursor = db.rawQuery(sql,null);
if(cursor.moveToFirst())
{
do
{
Test test = new Test();
test.setId(cursor.getInt(cursor.getColumnIndex(KEY_ID)));
test.setSubjectID(cursor.getInt(cursor.getColumnIndex(KEY_SUBJECT_ID)));
String dateString = cursor.getString(cursor.getColumnIndex(KEY_TEST_DATE));
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = null;
try {
date = format.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
test.setDate(date);
test.setGrade(cursor.getDouble(cursor.getColumnIndex(KEY_TEST_GRADE)));
tests.add(test);
}while(cursor.moveToNext());
}
return tests;
}
将数据插入同一个表的方法(无异常):
public long InsertTest(Test test)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_SUBJECT_ID,test.getSubjectID());
values.put(KEY_TEST_DATE,test.getDate().toString());
return db.insert(TEST_TABLE,null,values);
}
插入和获取数据的代码:
Test test = new Test(testSubjectID.getSelectedItemPosition(),date);
AddTestToList(test);
try {
dbManager.InsertTest(test);
List<Test> tests = dbManager.GetAllTests();
for (Test test:tests)
{
AddTestToList(test);
}
}catch (Exception e){Log.d("MSG_ERROR",e.toString());}
答案 0 :(得分:2)
<强> FYI 强>
App uninstall
不是好方法。如果您的APP在 PLAYSTORE
那么?您应该使用onUpgrade
来避免 DATA LOSS
。
需要升级数据库时调用。实施 应该使用此方法删除表,添加表或执行任何其他操作 它需要升级到新的架构版本。
如何?
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e(TAG, "Updating table from " + oldVersion + " to " + newVersion);
if (oldVersion < 3){ // Here I SET 3. You should use your DB version . When-ever **`adding table`** please increase DB version .
db.execSQL(ALTER_USER_TABLE_1);
db.execSQL(ALTER_USER_TABLE_2);
}
}
<强> ALTER TABLE
强>
private static final String ALTER_USER_TABLE_1 = "ALTER TABLE test_table ADD FIELD_NAME TEXT";
private static final String ALTER_USER_TABLE_2 = "ALTER TABLE test_table ADD FIELD_NAME2 TEXT";
答案 1 :(得分:0)
您的设备上有一个旧版本的数据库,该版本没有test_table
表。
解决方案:卸载您的应用并重新安装