当表中只有一行并且恰好是被替换的行时,insert或replace起作用。但是,当表中有多行时,insert或replace只是inserts并创建一个副本!
例如,如果我创建一个eventid为'123'的条目。然后尝试编写另一个eventid为'123'且roomnumber等于与第一个条目不同的条目,insert或replace将起作用。但是,如果表中有多行,它将创建一个副本。这是我的密码:
String createSql = "CREATE TABLE IF NOT EXISTS events (\n"
+ " eventId VARCHAR(20) PRIMARY KEY ON CONFLICT REPLACE,\n"
+ " roomNumber VARCHAR(20) NOT NULL,\n"
+ " startTime TIMESTAMP NOT NULL,\n"
+ " endTime TIMESTAMP NOT NULL,\n"
+ " name VARCHAR(250),\n"
+ " isVIP BOOLEAN NOT NULL,\n"
+ " capacity INTEGER(20) NOT NULL, \n"
+ " UNIQUE (eventId) \n"
+ ");";
String sql = "INSERT OR REPLACE INTO events (eventId, roomNumber, startTime, endTime, capacity, name, isVIP)" + " Values('"+event.getID()+"', '"+event.getRoomNumber()+"', '"+event.getStartTime()+"', '"+event.getEndTime()+"', '"+event.getCapacity()+"', '"+event.getName()+"', '"+event.getVIPStatus()+"')";
1条答案
按热度按时间hsgswve41#
我会阅读这篇文章来获得关于replace如何工作的更多信息。
https://stackoverflow.com/questions/29539838/replace-versus-insert-in-sql#:~:text=根据%20到%20文档%2c%20,插入了%20新的%20行%20。
另外,我建议尝试使用“replace”,因为它的功能是insert,但在冲突时会替换。