您认为从数据库获取所有表名并将其添加到列表的正确方法是什么?
现在已经走得那么远了:
final ArrayList<String> dirArray = new ArrayList<String>();
SqlHelper sqlHelper = new SqlHelper(this, "TK.db", null, 1);
SQLiteDatabase DB = sqlHelper.getWritableDatabase();
Cursor c = DB.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
c.moveToFirst();
while (c.isAfterLast() == false) {
dirArray.add("n" + c.getColumnIndex("name"));
c.moveToNext();
}
c.close();
但它会输出一些“android_metadata”而不是我的表名。所以猜测查询有问题。
谢谢!
答案 0 :(得分:11)
刚刚使用我正在使用的SQLite数据库在FireFox的SQLite Manager插件中进行了快速测试,并且您正在使用的查询确实返回了表名。您是否正确创建了表格并且是否根据您的期望测试了存在?
要迭代,请执行以下操作:
if (c.moveToFirst())
{
while ( !c.isAfterLast() ){
dirArray.add( c.getString( c.getColumnIndex("name")) );
c.moveToNext();
}
}
答案 1 :(得分:5)
试试这段代码
final ArrayList<String> dirArray = new ArrayList<String>();
SqlHelper sqlHelper = new SqlHelper(this, "TK.db", null, 1);
SQLiteDatabase DB = sqlHelper.getWritableDatabase();
Cursor c = DB.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
while(c.moveToNext()){
String s = c.getString(0);
if(s.equals("android_metadata"))
{
//System.out.println("Get Metadata");
continue;
}
else
{
dirArray.add(s);
}
}
答案 2 :(得分:0)
你也可以使用这个
Cursor cursor = DB.getInstance(this).getAllTableNames();
if (cursor.moveToFirst()) {
while (cursor.moveToNext()) {
String tableName = cursor.getString(cursor.getColumnIndex("name"));
Log.i(LOG_TAG, "..." + tableName);
}
}