android - 使用外键 ANDROID 创建数据库表

标签 android sqlite

我正在尝试创建一个数据库(目前)有 4 个表 {USERS,TOPICS,GROUPS,CREATED_TOPICS}。当我尝试运行它时,我不断收到此错误...

syntax error (code 1): , while compiling: create table created_topics_table (CREATED_TOPIC_ID INTEGER PRIMARY KEY AUTOINCREMENT, TOPIC_ID INTEGER,USER_ID INTEGER, FOREIGN KEY(TOPIC_ID) REFERENCES topics_table(_ID),FOREIGN KEY(USER_ID) REFERENCES users_table(_ID).

这是代码...

public class databaseHelper extends SQLiteOpenHelper
{
//DATABASE NAME
public static final String DATABASE_NAME = "users.db";
//USERS TABLE
public static final String TABLE_NAME_USERS = "users_table";
public static final String COL_USER_ID = "_ID";
public static final String COL_USER_NAME = "USER_NAME";
public static final String COL_USER_EMAIL = "USER_EMAIL";
public static final String COL_USER_PASSWORD = "USER_PASSWORD";
//TOPICS TABLE
public static final String TABLE_NAME_TOPICS = "topics_table";
public static final String COL_TOPIC_ID = "_ID";
public static final String COL_TOPIC_NAME = "TOPIC_NAME";


//GROUPS TABLE
public static final String TABLE_NAME_GROUPS = "groups_table";
public static final String COL_GROUP_ID = "GROUP_ID";
public static final String COL_GROUP_NAME = "GROUP_NAME";

public static final String TABLE_NAME_CREATED_TOPICS =
"created_topics_table";
public static final String COL_CREATED_TOPIC_ID = "CREATED_TOPIC_ID";
public static final String COL_FK_TOPIC_TOPIC_ID = "TOPIC_ID";
public static final String COL_FK_TOPIC_USER_ID = "USER_ID";

public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME_USERS + " (_ID INTEGER PRIMARY KEY   
AUTOINCREMENT,USER_NAME TEXT,USER_EMAIL TEXT,USER_PASSWORD TEXT)");
db.execSQL("create table " + TABLE_NAME_TOPICS + " (_ID INTEGER PRIMARY KEY     
AUTOINCREMENT,TOPIC_NAME TEXT)");
db.execSQL("create table " + TABLE_NAME_GROUPS + " (GROUPS_ID INTEGER PRIMARY    
KEY AUTOINCREMENT,GROUP_NAME TEXT)");
db.execSQL("create table " + TABLE_NAME_CREATED_TOPICS + " (CREATED_TOPIC_ID 
INTEGER PRIMARY KEY AUTOINCREMENT, TOPIC_ID INTEGER,USER_ID INTEGER, FOREIGN
KEY(TOPIC_ID) REFERENCES " +TABLE_NAME_TOPICS + "(_ID)," +                                                                                                                                                            
"FOREIGN KEY(USER_ID) REFERENCES " +TABLE_NAME_USERS + "(_ID)");
}

最佳答案

你错过了最后的右括号:

create table created_topics_table (CREATED_TOPIC_ID INTEGER PRIMARY KEY AUTOINCREMENT, TOPIC_ID INTEGER,USER_ID INTEGER, FOREIGN KEY(TOPIC_ID) REFERENCES topics_table(_ID),FOREIGN KEY (USER_ID) REFERENCES users_table(_ID))

关于 sqlite 外键的另一个注释。默认情况下它们是关闭的。每次打开数据库连接时都需要使用"PRAGMA foreign_keys=ON"

编辑

改变:

db.execSQL("create table " + TABLE_NAME_CREATED_TOPICS + " (CREATED_TOPIC_ID 
INTEGER PRIMARY KEY AUTOINCREMENT, TOPIC_ID INTEGER,USER_ID INTEGER, FOREIGN
KEY (TOPIC_ID) REFERENCES " +TABLE_NAME_TOPICS + " (_ID)," +                                                                    
"FOREIGN KEY (USER_ID) REFERENCES " +TABLE_NAME_USERS + " (_ID))");

关于android - 使用外键 ANDROID 创建数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36974850/

相关文章:

android - 数据库插入

android - Android Studio中这两个Gradle是什么意思?

Android 滑入滑出动画问题

ios - sqlite for swift 不稳定

node.js - Nodejs 异步模块有事务

python sqlite 创建 id 整数主键自动增量

android - React-Native:FlatList 中的反向 zIndex

android - 如何在 Activity 中使用 simpleadapter

android - SQLiteDatabase 或 XML(保存)?

mysql - sql不同函数的麻烦