2017-10-09 63 views
0

我使用SQLiteDatabase和我有一个奇怪的问题 - 当我尝试SELECT * FROM表它给了我这样的:的Android工作室SQL找不到表

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());} 
+3

卸载应用程序,并重新安装 –

+0

问题解决了:) –

+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"; 
0

有一个旧版本的d您的设备上没有test_table表的数据库。

解决方法:卸载你的应用程序,并重新安装