В моем текущем проекте андроида, когда я пытаюсь вставить значение в моей базе данных SQLite, через эту SQL заявление:Вставить в SQLite базы данных не генерирует первичный ключ
insert into Usuario(nome, sobrenome, email, login, senha) values (?, ?, ?, ?, ?)
строка вставляются без значения для первичный ключ. У меня есть идентификатор столбца, который согласно этому link, это псевдоним ROWID и должен быть заполнен автоматически, что это не происходит.
код, где эта вставка выполняется так, что:
public void insert(String[] data) {
try {
Model object = clazz.newInstance();
List<String> lista = object.getFields();
List<String> campos = new ArrayList<String>();
for(int i=1; i<lista.size(); i++)
campos.add(lista.get(i));
List<String> values = new ArrayList<String>();
for(int i=0; i<campos.size(); i++)
values.add("?");
String scampos = campos.toString().replace("[", "(").replace("]", ")");
String svalues = values.toString().replace("[", "(").replace("]", ")");
String INSERT = "insert into " + clazz.getSimpleName() + scampos + " values "+ svalues;
System.out.println("===== INSERT -> "+INSERT);
SQLiteDatabase db = openHelper.getWritableDatabase();
SQLiteStatement insertStmt = db.compileStatement(INSERT);
for(int i=0; i<data.length; i++)
insertStmt.bindString(i+1, data[i]);
insertStmt.executeInsert();
} catch (Exception e) {
e.printStackTrace();
}
}
кто-нибудь знает, что я здесь делаю неправильно? Я не могу понять, в чем проблема.
UPDATE
После чтения отмеченного ответа, я проверить код для создания таблицы:
Model object = clazz.newInstance();
String CREATE = "CREATE TABLE " + this.getClazz().getSimpleName() + object.dbFields().toString().replace("[", "(").replace("]", ")");
System.out.println(CREATE);
db.execSQL(CREATE);
и нашел способ dbFields
не включать PRIMARY KEY атрибута для столбца идентификаторов , Я исправляю это, и теперь проблема решена.
Не могли бы вы опубликовать инструкцию create table – gZerone