我试图有一个带有自动递增主键的表。包含用于创建表的SQL查询。
问题是自动增量不起作用。意思是当我插入一行为NULL的值时,conversation_id
它只是插入null
。我在多个表上都有这个问题。
-- Table: conversations
CREATE TABLE conversations (
conversation_id INTEGER (64) PRIMARY KEY
UNIQUE,
target_id BIGINT (64),
sender_id BIGINT (64),
status STRING (16) NOT NULL
DEFAULT unseen,
is_group INTEGER (1) NOT NULL
DEFAULT (0),
last_update INTEGER (32) DEFAULT (0),
target_name STRING (64),
target_photo STRING (256),
unread_count INTEGER (10) DEFAULT (0),
last_message STRING (256)
);
以下是我用于插入表的方法:
public Conversation addConversation(Conversation conversation) {
SQLiteDatabase db = getWritableDatabase();
ContentValues row = new ContentValues();
row.put("target_id", conversation.getTargetID());
row.put("sender_id", conversation.getSenderID());
row.put("target_name", conversation.getTargetName());
row.put("target_photo", conversation.getTargetPhoto());
row.put("status", conversation.getStatus());
row.put("unread_count", conversation.getUnreadCount());
row.put("last_message", conversation.getLastMessage());
conversation.setConversationID(db.insert(TBL_CONVERSATIONS, null, row));
Log.d(TAG, "conversation added: "+conversation.getConversationID());
db.close();
return conversation;
}
奇怪的是,当我从insert
方法中检索插入ID时,它返回正确的值,但实际的数据库字段为null。
如果我正确理解A column declared INTEGER PRIMARY KEY will autoincrement.
[引用]
从文档:
使用CREATE TABLE AS创建的表没有PRIMARY KEY,也没有任何类型的约束。每列的默认值为NULL。
您不必UNIQUE
在具有PRIMARY KEY
约束的COLUMN上添加约束。
解释:
UNIQUE约束与PRIMARY KEY约束相似,除了单个表可以具有任意数量的UNIQUE约束。
而是添加NOT NULL
。这就是为什么:
根据SQL标准,PRIMARY KEY应该始终暗示NOT NULL。不幸的是,由于某些早期版本中的错误,SQLite并非如此。除非该列是INTEGER PRIMARY KEY或表是WITHOUT ROWID表或将该列声明为NOT NULL,否则SQLite允许在PRIMARY KEY列中使用NULL值。可以修复SQLite使其符合标准,但是这样做可能会破坏旧版应用程序。因此,决定仅记录SQLite在大多数PRIMARY KEY列中允许NULL的事实。
我建议使用此列定义:
CREATE TABLE conversations (
conversation_id INTEGER PRIMARY KEY NOT NULL AUTOINCREMENT,
...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句