10

我想我已经用 android 创建了一个 sqllite 数据库,但是每次我去插入时,它都声称一列不存在。如何查看架构以及在创建对象时是否调用了 onCreate 方法?

4

3 回答 3

13

你可以用代码做到这一点。Sqlite 有一个名为“sqlite_master”的表,其中包含模式信息。

    /**
     * Get all table Details from the sqlite_master table in Db.
     * 
     * @return An ArrayList of table details.
     */
    public ArrayList<String[]> getDbTableDetails() {
        Cursor c = db.rawQuery(
                "SELECT name FROM sqlite_master WHERE type='table'", null);
        ArrayList<String[]> result = new ArrayList<String[]>();
        int i = 0;
        result.add(c.getColumnNames());
        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
            String[] temp = new String[c.getColumnCount()];
            for (i = 0; i < temp.length; i++) {
                temp[i] = c.getString(i);
            }
            result.add(temp);
        }

        return result;
    }

更简单的方法是在模拟器上运行它。

  1. 打开 ddms 视角
  2. 查找数据/data/PACKAGENAME/database/YOURFILE
  3. 单击右上角的从数据库中提取按钮,如图所示。

打开 在此处输入图像描述

于 2013-01-18T00:06:06.813 回答
1

检查数据库架构的另一种方法是adb shell进入设备(或模拟器)。使用:启动 sqlite 的命令行sqlite3 <path to your database>.schema在命令提示符下键入。

请参阅:http: //developer.android.com/tools/help/sqlite3.html

于 2013-01-18T00:39:36.580 回答
0

您可以按如下方式获取表名:

    /**
     * Get all table Details from the sqlite_master table in Db.
     * 
     * SQlite has a table called "sqlite_master " which holds schema information.
     * 
     * @return An ArrayList of table names.
     */
    public ArrayList<String> getDbTableNames(SQLiteDatabase db) {
        ArrayList<String> result = new ArrayList<String>();
        Cursor c = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);

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

        return result;
    }
于 2016-04-21T08:41:00.873 回答