Android studio SQL无法找到表

时间:2017-10-09 08:21:41

标签: java android sqlite

我正在使用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());}

2 个答案:

答案 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表。

解决方案:卸载您的应用并重新安装