创建了一个表
“CREATE TABLE student(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,课程TEXT)“
现在尝试插入像
这样的行String sql = "INSERT INTO student" +" VALUES (?,?)";
SQLiteStatement statement = myWriteableDatabase.compileStatement(sql);
statement.clearBindings();
statement.bindString(2, "Some Name");
statement.bindString(3, "Some Course");
statement.execute();
这引发了一个例外
table student has 3 columns but 2 values were supplied: , while compiling: INSERT INTO student VALUES (?,?);
为什么这个例外,即使我已将 id 列设为AUTOINCREMENT。
答案 0 :(得分:3)
如果PRIMARY KEY
插入到列中,则NULL
自动生成只会启动。
指定要插入的列:
INSERT INTO student(name,course) VALUES ...
以便id
列获取NULL
默认值,或显式插入NULL值,例如
INSERT INTO student VALUES(NULL,?,?)
同时检查绑定索引。它们不正确 - 它是查询字符串中?
的索引,而不是表中列的索引。
答案 1 :(得分:1)
首先,您的bindString
次来电显示错误,您的查询中只有2个?
个符号,第一个指向名称列,第二个?
指向课程栏目。
如果你想使用这样的查询:
INSERT INTO student VALUES ('name', 'course')
您需要将代码更改为(请参阅查询):
String sql = "INSERT INTO student" +" VALUES (NULL, ?,?)";
SQLiteStatement statement = myWriteableDatabase.compileStatement(sql);
statement.clearBindings();
statement.bindString(1, "Some Name");
statement.bindString(2, "Some Course");
statement.execute();
或者您可以使用此查询:
INSERT INTO student (name, course) VALUES ('first', 'second')
在这种情况下,您可以使用以下代码:
String sql = "INSERT INTO student (name, course)" +" VALUES (?,?)";
SQLiteStatement statement = myWriteableDatabase.compileStatement(sql);
statement.clearBindings();
statement.bindString(1, "Some Name");
statement.bindString(2, "Some Course");
statement.execute();