SQLite и Android Вставка / Обновления в SQLiteDatabase -CompiledStatements- - PullRequest
1 голос
/ 15 июля 2011

Притворись, у меня есть таблица с 2 столбцами. _id и имя. _id является первичным ключом, и я не хочу устанавливать это значение вручную. Я хочу выполнить вставку name = "john" и позволить программе создать мой собственный _id. Мне неясно, какой «индекс» использовать при вставке и сколько знаков вопроса использовать. Этот код делает работу? Должен ли индекс Джона быть 1 или 2?

String TABLENAME = "table";

SQLiteStatement statement = db.compileStatement("INSERT INTO "+TABLENAME+" VALUES(?);");    

statement.bindString(1,"john");

statement.executeInsert();

Далее, скажем, я хочу вручную установить собственное значение _id. Буду ли я изменить код на:

String TABLENAME = "table";

SQLiteStatement statement = db.compileStatement("INSERT INTO "+TABLENAME+" VALUES(?,?);");  

statement.bindLong(1,666);  //Manual _id.

statement.bindString(2,"john");

statement.executeInsert();

Ответы [ 2 ]

3 голосов
/ 21 августа 2012

Тогда

    SQLiteStatement statement = db.compileStatement("INSERT INTO "+TABLENAME+" VALUES(null,?);");
    statement.bindString(1,"john");

Должно также работать.

3 голосов
/ 15 июля 2011

Ваш первый пример, в котором вы указываете только имя, не будет работать:

sqlite> create table test (i integer primary key autoincrement, j text);
sqlite> insert into test values ('asd');
Error: table test has 2 columns but 1 values were supplied
sqlite> insert into test values (null, 'asd');
sqlite> select * from test;
1|asd
sqlite> insert into test (j) values ('asd');
sqlite> select * from test;
1|asd
2|asd

, поэтому вам необходимо указать столбец имени в качестве пункта назначения единственного значения (или, как вы упомянули вcomment pass null):

SQLiteStatement statement = db.compileStatement("INSERT INTO "+TABLENAME+" (name) VALUES(?);"); 

Ваш второй пример должен работать нормально.

Это применимо к некоторым таблицам, созданным таким образом:

create table SomeTable (_id integer primary key autoincrement, name text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...