java.lang.IllegalArgumentException:无法绑定索引0处的参数,因为该索引超出范围。该语句有4个参数

java.lang.IllegalArgumentException:无法绑定索引0处的参数,因为该索引超出范围。该语句有4个参数,java,android,sqlite,Java,Android,Sqlite,Android SQLLite给了我以下错误: SQLiteStatement tgStatement = dbo.compileStatement("INSERT OR REPLACE INTO Game_Team" + "(teamId, gameId, pos, score) VALUES (?,?,?,?) "); 这就是为什么我尝试这样做: tgStatement.bindLong(0, 1); 我犯了一个错误 java.lang.IllegalA

Android SQLLite给了我以下错误:

 SQLiteStatement tgStatement = dbo.compileStatement("INSERT OR REPLACE INTO Game_Team" +
                "(teamId, gameId, pos, score) VALUES (?,?,?,?) ");
这就是为什么我尝试这样做:

tgStatement.bindLong(0, 1);
我犯了一个错误

java.lang.IllegalArgumentException:无法在索引0处绑定参数,因为索引超出范围。

该语句有4个参数


所以,我的问题是,如果有4个参数,为什么它会抱怨索引0处的参数?怎么会超出范围?

索引从1开始。所以它是setLong(1,1)

参数是1索引的。索引需要从1运行到4,因此0超出范围。

此技巧可能对某些人有用

SQLiteStatement tgStatement = dbo.compileStatement("INSERT OR REPLACE INTO Game_Team" +
                "(teamId, gameId, pos, score) VALUES (?,?,?,?) ");
    int i = 1;
    tgStatement.bindLong(i++, teamId);
    tgStatement.bindLong(i++, gameId);
    tgStatement.bindString(i++, pos);
    tgStatement.bindLong(i++, score);

当您有更多参数时,上述技巧非常有用,它可以避免索引上的缺失以及对它们进行编号。我会处理指示

哦,哇。就在我没想到的时候。我花了无数个小时试图弄明白这一点。左右搜索,然后我终于打破了。。。非常感谢你!