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