安卓Sqlite数据库架构

10

我认为我已经在Android上创建了一个sqllite数据库,但每次我尝试插入数据时,它都会提示某个列不存在。 我该如何查看数据库架构,并且onCreate方法会在创建对象时被调用吗?

3个回答

14

你可以通过编写代码来完成这个任务。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/data/PACKAGENAME/database/YOURFILE
  3. 点击右上方显示在图片中的“pull from db”按钮。

打开 enter image description here


谢谢回复,我想尝试使用模拟器来看看。这该怎么做? - Paul
在第二部分中,我该如何读取所得到的文件?当我在文本编辑器中打开它时,它看起来像是一个二进制文件。 - Gaurav Ojha

1
另一种检查数据库模式的方法是通过 adb shell 进入设备(或模拟器)。使用以下命令启动 sqlite 的命令行:sqlite3 <path to your database>,然后在命令提示符处键入 .schema
参见:http://developer.android.com/tools/help/sqlite3.html

1
由于某些原因,运行“sqlite3”时出现了“/system/bin/sh: sqlite3: not found”的消息,但我成功地在root浏览器的文件夹中找到了该程序(我已经购买并安装了该软件),方法是在运行“su”后执行“find | grep sqlite3”。这是因为我的手机已经被root。 - Ciske
我相信sqlite3在设备上不可用,只能在模拟器上使用。 - artem_p

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接