首页 > 解决方案 > 如何将数据作为外键添加到 SQLite 表?

问题描述

我的数据库中有两个表。那些是usermessage

User表包含,

  1. 用户 ID(主键)
  2. 用户名
  3. 密码栏

Message表包含,

  1. MessageId(主键)
  2. 用户 ID(外键)
  3. 主题
  4. 留言栏

登录后用户可以发送消息。所以我想将上面的列详细信息保存在message表格中。但是当我填表时,userid并没有得到作为外键。该列是空的,如下图所示。

在此处输入图像描述

这些是我的 dbHandler 代码

public void onCreate(SQLiteDatabase db) {
    String TABLE_USER_CREATE = "CREATE TABLE "+ UserTable.Users.TABLE_NAME+"("+
            UserTable.Users._ID+" INTEGER PRIMARY KEY,"+
            UserTable.Users.COLUMN_NAME+" TEXT,"+
            UserTable.Users.COLUMN_PASSWORD+ " TEXT,"+
            UserTable.Users.COLUMN_TYPE+ " TEXT"+" );";
    db.execSQL(TABLE_USER_CREATE);

    String TABLE_MESSAGE_CREATE = "CREATE TABLE "+ MessageTable.Messages.TABLE_NAME+"("+
            MessageTable.Messages._ID+" INTEGER PRIMARY KEY,"+
            MessageTable.Messages.COLUMN_USER+" TEXT,"+
            MessageTable.Messages.COLUMN_SUBJECT+ " TEXT,"+
            MessageTable.Messages.COLUMN_MESSAGE+" TEXT,"+
            " FOREIGN KEY ("+ MessageTable.Messages.COLUMN_USER+") REFERENCES "+ UserTable.Users.TABLE_NAME+"("+ UserTable.Users._ID+"))";
    db.execSQL(TABLE_MESSAGE_CREATE);
}

保存消息方法:

 public long saveMessage(String subjects, String messages){
    SQLiteDatabase db = getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put(MessageTable.Messages.COLUMN_SUBJECT,subjects);
    contentValues.put(MessageTable.Messages.COLUMN_MESSAGE,messages);

   long newRowId = db.insert(MessageTable.Messages.TABLE_NAME,null,contentValues);

    db.close();
    return newRowId; }

我是安卓新手。有人可以帮我解决这个问题吗?

标签: javaandroidsqlite

解决方案


这是NULL因为你从来没有设置它。外键并不神奇,它们只是一个约束,即您添加的任何值都必须存在于引用的列中。

由于您也没有添加NOT NULL约束,它只是添加了您告诉它的内容 - 只有主题和消息。


推荐阅读