【问题标题】:SQLite, how to get all table names in database?SQLite,如何获取数据库中的所有表名?
【发布时间】:2011-11-17 20:37:33
【问题描述】:

您认为从数据库中获取所有表名并将它们添加到列表中的正确方法是什么?

现在已经走到这一步了:

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”而不是我的表名。所以猜猜这​​个查询有问题。

谢谢!

【问题讨论】:

    标签: java android database sqlite


    【解决方案1】:

    刚刚使用我正在使用的 SQLite db 在 FireFox 的 SQLite Manager 插件中进行了快速测试,并且您使用的查询确实返回了表名。您是否正确地创建了表格,并且是否按照您的期望测试了存在?

    要遍历,请执行以下操作:

        if (c.moveToFirst())
        {
            while ( !c.isAfterLast() ){
               dirArray.add( c.getString( c.getColumnIndex("name")) );
               c.moveToNext();
            }
        }
    

    【讨论】:

    • 是的,现在似乎可以了,只输出第一个为“android_metadata”,我就忽略它吗?
    • 是的,放一些东西来忽略第一行。你甚至可以在 while() 循环之前放一个 c.moveToNext() 或者显式检查它。
    【解决方案2】:

    试试这个代码

    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);
       }
     }
    

    【讨论】:

      【解决方案3】:

      你也可以用这个

      Cursor cursor = DB.getInstance(this).getAllTableNames();
      if (cursor.moveToFirst()) {
          while (cursor.moveToNext()) {
              String tableName = cursor.getString(cursor.getColumnIndex("name"));
              Log.i(LOG_TAG, "..." + tableName);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-03-01
        • 2016-08-14
        • 1970-01-01
        • 2011-02-16
        • 2011-09-07
        • 2011-04-30
        • 2011-02-17
        • 2016-05-13
        • 2021-12-05
        相关资源
        最近更新 更多