SQLiteAssetHelper - '没有这样的表'错误

时间:2015-10-05 00:22:03

标签: java android sqlite

我已经使用DB Browser for SQLite预先填充了一个数据库,并尝试使用SQLiteAssetHelper从中检索数据(使用https://github.com/jgilfelt/android-sqlite-asset-helper处的指南安装并使用它)并得到一个"没有这样的表"错误。我确信在数据库中有一个以这种方式命名的表。我已经尝试调试它,看到我将DATABASE_VERSION保持为等于1,而不是检测到已经存在数据库并且没有复制它,但是如果我将数据库版本和setForceUpdate更改为(true) )然后它复制它,但无论如何我得到相同的错误。我应该怎样做才能让SQLiteAssetHelper正确地复制我的数据库并摆脱那个恼人的错误?

代码:

DataBaseHelper类:

public class DataBaseHelper extends SQLiteAssetHelper {

private static final String DATABASE_NAME = "DonRoll";
private static final int DATABASE_VERSION = 2;

private static DataBaseHelper instance;

public static DataBaseHelper getInstance(Context context){
    if (null == instance){
        instance = new DataBaseHelper(context);
    }
    return instance;
}

private DataBaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

public Cursor getAllCategoryNames() {
    setForcedUpgrade(2);
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    qb.setTables("MenuCategories");
    Cursor c = qb.query(db, null, null, null, null, null, null);
    c.moveToFirst();
    return c;
}

}

活动类:

public class CategoryListActivity extends ListActivity {

DataBaseHelper db;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_category_list);
    db = DataBaseHelper.getInstance(this);
    getData();
}

@SuppressWarnings("deprecation")
private void getData() {
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
            android.R.layout.simple_list_item_1,
            db.getAllCategoryNames(),
            new String[] { "value" },
            new int[] { android.R.id.text1 });

    ListView listView = (ListView) findViewById(android.R.id.list);
    listView.setAdapter(adapter);
}

}

1 个答案:

答案 0 :(得分:0)

问题解决了:我使用adb pull从资源文件夹中获取数据库文件,它以某种方式被破坏 - 它只有“android_metadata”表。我不知道为什么会这样(也许是因为我把它重新命名为Android Studio?),但是一旦我删除了这个文件并用合适的文件替换它,一切都运行得很好。