java - Android sqlite邻接模型

标签 java android sql sqlite android-studio

我是 Android 开发新手,正在从事一个需要数据库交互的项目 当尝试使用 sqlite 中的邻接模型创建表但编译失败并显示此错误消息时

 |   id  |   parentid    |   name    |
-----------------------------------------
|   1    |   null        |   animal   |
|   2    |   null        |vegetable   |
|   3    |   1           |   doggie   |
|   4    |   2           |   carrot   |
|        |               |            |
|        |               |            |

这是我的代码:

private static final String CREATE_TABLE_CATEGORIES="CREATE TABLE "+TABLE_CATEGORIES+"(id INTEGER PRIMARY KEY AUTOINCREMENT,"+category_name+
            " TEXT,parentid INTEGER ,foreign key parentid_fk(parentid) references "+TABLE_CATEGORIES+" (id));";

@Override
    public void onCreate(SQLiteDatabase db){
        //Creation required tables


        db.execSQL(CREATE_TABLE_CATEGORIES);

    }
....
....
....
....
 @Override
    public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
        // on upgrade drop older tables
        db.execSQL("PRAGMA foreign_keys = ON;");
        db.execSQL("DROP TABLE IF EXISTS " + CREATE_TABLE_CATEGORIES);
        // create new tables
        onCreate(db);
    }

这是错误:

at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.database.sqlite.SQLiteException: near "parentid_fk": syntax error (code 1): , while compiling: CREATE TABLE Categories(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,parentid INTEGER ,foreign key parentid_fk(parentid) references Categories (id));

最佳答案

要为外键约束命名,必须使用 CONSTRAINT 关键字:

CONSTRAINT parentid_fk FOREIGN KEY (parentid) REFERENCES Categories(id)

或者,不要给它命名:

FOREIGN KEY (parentid) REFERENCES Categories(id)

关于java - Android sqlite邻接模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25549378/

相关文章:

java - XPATH - 如何从网页获取文本?

java - 如何在 Hibernate 的 XML 文件中声明一对多映射?

java - 为什么我没有收到 onActivityResult 的任何结果

android - 去掉大圆opencv android中的小圆

android - genymotion: "player.exe sttoped working"

.net - 检查oracle函数是否存在

java - 如何将参数传递给 JavaFX 应用程序?

java - Spotify Android SDK - 如何在一小时后刷新播放器对象

mysql - 保存 SQL 查询的中间结果

php - 在单个 MySQL 查询中使用多个临时表(适用于 phpMyAdmin,但不适用于 PHP)