插入记录时出现Android SQLite错误

时间:2014-07-24 13:24:41

标签: java android sql sqlite

我尝试了很多东西并搜索了SO和谷歌,但这是一个奇怪的错误。当我单击在数据库中创建(插入)新级别的按钮时,会发生错误。 Logcat如下:

http://pokit.org/get/?564ecab747237335f72006e8e3d5d633.jpg

还有更多下降,但同样的错误。

以下是执行插入的代码。我顺便使用SQLiteAssetHelper。

    public void createLevel(Level lev){


    ContentValues values = new ContentValues();
    if(lev.getGameMode()=="SinglePlayer")
    {
        LevelSinglePlayer level=(LevelSinglePlayer)lev;
        values.put(GAME_MODE_COLUMN, level.getGameMode());
        values.put(DIFFICULTY_COLUMN, level.getDifficulty());
        values.put(SINGLE_PLAYER_MODE_COLUMN, level.getSinglePlayerMode());
        values.putNull(TIME_CHALLENGE_MODE_COLUMN);
        values.put(POINTS_COLUMN, level.getPoints());
        values.put(LIVES_COLUMN, level.getLives());
        values.putNull(TIME_COLUMN);
        values.put(SUFFIX_COLUMN, level.getSuffix());
        values.put(SUFFIX_WORDS_COUNT_COLUMN, level.getSuffixWordsCount());
        db.insert(LEVELS_TABLE, null, values);
        Log.w("INSERT_NEW_LEVEL", "SUCCESSFUL INSERT");
    }
    else if(lev.getGameMode()=="TimeChallenge")
    {
        LevelTimeChallenge level= (LevelTimeChallenge)lev;
        values.put(GAME_MODE_COLUMN, level.getGameMode());
        values.put(DIFFICULTY_COLUMN, level.getDifficulty());
        values.putNull(SINGLE_PLAYER_MODE_COLUMN);
        values.put(TIME_CHALLENGE_MODE_COLUMN, level.getTimeChallengeMode());
        values.put(POINTS_COLUMN, level.getPoints());
        values.put(LIVES_COLUMN, level.getLives());
        values.put(TIME_COLUMN, level.getTime());
        values.put(SUFFIX_COLUMN, level.getSuffix());
        values.put(SUFFIX_WORDS_COUNT_COLUMN, level.getSuffixWordsCount());
        db.insert(LEVELS_TABLE, null, values);
        Log.w("INSERT_NEW_LEVEL", "SUCCESSFUL INSERT");

    }   
}

我有三个表,由以下语句创建:

CREATE TABLE IF NOT EXISTS words(_id INTEGER PRIMARY KEY, word TEXT, tezina INTEGER)
CREATE TABLE IF NOT EXISTS levels(_id INTEGER PRIMARY KEY, modIgre TEXT NOT NULL,  tezina INTEGER NOT NULL, modSingle TEXT, modTime TEXT, targetpoints INTEGER, lives   INTEGER, nastavak TEXT, brojRijeciNastavak INTEGER, locked BOOLEAN, earnedpoints INTEGER, kaladonts INTEGER, req2stars INTEGER, req3stars INTEGER)
CREATE TABLE IF NOT EXISTS highscores(_id INTEGER PRIMARY KEY, player TEXT, points INTEGER)

我可以快速发布所需内容。

编辑:Java consts

//konstante(nazivi tabela)
private static final String GAME_MODE_COLUMN = "modIgre";//mod igre - single, time
private static final String DIFFICULTY_COLUMN = "tezina";//tezina rijeci na levelu
private static final String SINGLE_PLAYER_MODE_COLUMN = "modSingle";//mod single playera
private static final String TIME_CHALLENGE_MODE_COLUMN = "modTime";//mod time challenga
private static final String POINTS_COLUMN = "points";
private static final String LIVES_COLUMN = "lives";//zivoti
private static final String TIME_COLUMN = "";//koliko vrijeme?
private static final String SUFFIX_COLUMN = "nastavak";//koji nastavak?
private static final String SUFFIX_WORDS_COUNT_COLUMN = "brojRijeciNastavak";//koliko 
private static final String ID_COLUMN = "_id";
private static final String TARGET_POINTS_COLUMN = "targetpoints";
private static final String LOCKED_COLUMN = "locked";
private static final String KALADONTS_COLUMN = "kaladonts";
private static final String TWO_STARS_COLUMN = "req2stars";
private static final String THREE_STARS_COLUMN = "req3stars";
private static final String EARNED_POINTS_COLUMN = "earnedpoints";
private static final String LEVELS_TABLE = "levels";

3 个答案:

答案 0 :(得分:0)

您的查询中还有额外的“”,或者您忘记在查询中输入第一个字段,因此正确的查询是:

INSERT into levels(modIgre,modTime,modSingle,brojRijeciNastavak,nastavak,tezina,lives,points)Values(?,?,?,?,?,?,?,?)

答案 1 :(得分:0)

你的主键似乎是null和值。

INSERT into levels(,modIgre,modTime,modSingle,brojRijeciNastavak,nastavak,tezina,lives,points)Values(?,?,?,?,?,?,?,?)

这是一个问题,因为您通过,。

开始查询

答案 2 :(得分:0)

您的TIME_COLUMN是一个空字符串,导致无效的SQL被创建:

private static final String TIME_COLUMN = "";//koliko vrijeme?

您可以将其替换为实际的列名称。我们CREATE TABLE中没有找到合适的列,因此您可能应该完全删除put(TIME_COLUMN)个来电。