java - 如何将数据作为外键添加到 SQLite 表?
问题描述
我的数据库中有两个表。那些是user
和message
。
User
表包含,
- 用户 ID(主键)
- 用户名
- 密码栏
Message
表包含,
- MessageId(主键)
- 用户 ID(外键)
- 主题
- 留言栏
登录后用户可以发送消息。所以我想将上面的列详细信息保存在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; }
我是安卓新手。有人可以帮我解决这个问题吗?
解决方案
这是NULL
因为你从来没有设置它。外键并不神奇,它们只是一个约束,即您添加的任何值都必须存在于引用的列中。
由于您也没有添加NOT NULL
约束,它只是添加了您告诉它的内容 - 只有主题和消息。
推荐阅读
- python - Windows 命令找不到脚本
- html - 如何强制元素出现在父级及其父级后面?
- python - Discord.py - 有没有办法使用 @commands.has_role('RoleName') 来检查这个人是否具有两个角色之一?
- php - Snipe-IT:电子邮件通知 URL 链接已损坏(指向 localhost)
- neo4j - 简化密码,匹配所有节点和两种节点类型之间的关系
- module - 在 prestashop 中安装模块时出现错误
- github - GitHub 使用什么库来呈现 Markdown 文档之间的差异?
- node.js - 如何在单独的 nodejs 脚本中使用 create-react-app 中的源文件?
- numpy - 使用 linspace 计算分母时如何防止获得较大的值?
- bash - 在 BASH 中,如何保存要在其余脚本完成后运行的命令?