INSERT或IGNORE插入重复的语句

时间:2015-04-17 21:56:45

标签: java sql sqlite

所以我的SQL查询有问题,首先我运行它以确保该条目在数据库中:

 "INSERT OR IGNORE INTO `scores` (`uuid`) VALUES ('" + stat.player + "')"

接下来我跑:

"UPDATE scores SET uuid = '" + stat.player + "', level = '"
                + stat.level + "', xp = '" + stat.xp
                + "', xpToNextLevel = '" + stat.xpToNextLevel
                + "', attackPoints = '" + stat.attackPoints
                + "', defencePoints = '" + stat.defencePoints
                + "', kills = '" + stat.kills + "', deaths = '"
                + stat.deaths + "', monsterKills = '" + stat.monsterKills
                + "' WHERE uuid = '" + stat.player + "'"\

我的问题是,如果存在重复值,则运行“INSERT OR IGNORE”并不会忽略。它会在每次运行时插入一个具有相同uuid的新行,并使用相同的uuid更新所有行。

我猜我可能会遗漏一些东西,如果你能帮到我,我会非常感激。

我的CREATE TABLE声明是:

CREATE TABLE scores (
    uuid varchar(128) NOT NULL,
    level int(11) NOT NULL DEFAULT '1',
    xp int(11) NOT NULL DEFAULT '0',
    xpToNextLevel int(11) NOT NULL DEFAULT '500',
    attackPoints int(11) NOT NULL DEFAULT '0',
    defencePoints int(11) NOT NULL DEFAULT '0',
    kills int(11) NOT NULL DEFAULT '0',
    deaths int(11) NOT NULL DEFAULT '0',
    monsterKills int(11) NOT NULL DEFAULT '0')

1 个答案:

答案 0 :(得分:2)

您的INSERT OR IGNORE SQL语句看起来不错。您的uuid很可能未设置为UNIQUEPRIMARY KEY

请改为使用CREATE TABLE

CREATE TABLE scores (
    uuid varchar(128) PRIMARY KEY,
    level int(11) NOT NULL DEFAULT '1',
    xp int(11) NOT NULL DEFAULT '0',
    xpToNextLevel int(11) NOT NULL DEFAULT '500',
    attackPoints int(11) NOT NULL DEFAULT '0',
    defencePoints int(11) NOT NULL DEFAULT '0',
    kills int(11) NOT NULL DEFAULT '0',
    deaths int(11) NOT NULL DEFAULT '0',
    monsterKills int(11) NOT NULL DEFAULT '0')