带有语句绑定的 SQlite AUTOINCREMENT
SQlite AUTOINCREMENT with Statement Binding
创建了 table
"CREATE TABLE student ( id INTEGER PRIMARY KEY AUTOINCREMENT, name
TEXT, course 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,为什么还会出现此异常。
PRIMARY KEY
自动生成仅在 NULL
插入到列中时才会启动。
指定要插入的列:
INSERT INTO student(name,course) VALUES ...
以便id
列获得NULL
默认值,或者显式插入一个NULL值,例如
INSERT INTO student VALUES(NULL,?,?)
同时检查您的绑定索引。它们不正确 - 它是查询字符串中 ?
的索引,而不是 table.
中列的索引
首先,您的 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();
创建了 table
"CREATE TABLE student ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, course 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,为什么还会出现此异常。
PRIMARY KEY
自动生成仅在 NULL
插入到列中时才会启动。
指定要插入的列:
INSERT INTO student(name,course) VALUES ...
以便id
列获得NULL
默认值,或者显式插入一个NULL值,例如
INSERT INTO student VALUES(NULL,?,?)
同时检查您的绑定索引。它们不正确 - 它是查询字符串中 ?
的索引,而不是 table.
首先,您的 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();