【问题标题】:Android sqlite multiple tablesAndroid sqlite 多表
【发布时间】:2011-12-17 06:29:34
【问题描述】:

我想在一个 sqlite 数据库中创建 2 个表。我将数据库从模拟器拉到电脑,但无法创建第二个表,只是第一个表已成功创建。我可以看到创建表成功还是没有输入数据?或者我必须先输入数据,然后我可以通过先从模拟器中提取数据库来手动查看?

这是我创建多个表的代码

db.execSQL("CREATE TABLE almag (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, jekel TEXT);");
db.execSQL("CREATE TABLE score (_id INTEGER PRIMARY KEY AUTOINCREMENT, score INTEGER, userId INTEGER FOREIGN KEY REFERENCES almag (_id));"); //create table score

【问题讨论】:

  • 如果表创建失败,您应该会在 logcat 中看到日志。您使用哪个 Android 版本?如stack overflow question 中的评论所述,Android 2.2 下不支持外键
  • 我使用 2.2 。在 2.2 中还有另一种创建外键的方法吗?
  • 如果您不针对旧版本:stackoverflow.com/questions/2545558/… 否则您将不得不编写模拟外键约束的触发器 - Google 会很容易地帮助您。
  • 感谢 Jens,我已经解决了 :)

标签: android database sqlite create-table


【解决方案1】:

我已经解决了,在android 2.2中添加外键只需要添加这些代码

public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE almag (_id INTEGER PRIMARY KEY AUTOINCREMENT, nama TEXT, jekel TEXT);");
    db.execSQL("CREATE TABLE score (_id INTEGER PRIMARY KEY AUTOINCREMENT, score INTEGER, userId INTEGER NOT NULL, FOREIGN KEY (userId) REFERENCES almag(_id) ON DELETE CASCADE);"); //create table score
    db.execSQL("PRAGMA foreign_keys = ON;");
}

参考http://panierter-pinguin.de/blog/?p=138

【讨论】:

    【解决方案2】:

    要手动查看数据库中的数据(非编程),您可以使用 Firefox 的 SQLiteManager 插件

    【讨论】:

      【解决方案3】:

      db.execSQL(Table_CREATE_SQL) 在这种情况下应该可以正常工作,但它无法返回任何数据,但是如果 SQL 字符串无效,它会抛出 SQLException。

      您可以拉出数据库并使用SQLite browser 来检查表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-07
        • 2011-07-10
        相关资源
        最近更新 更多