【发布时间】:2015-01-13 20:31:08
【问题描述】:
在我当前的android项目中,当我尝试在我的sqlite数据库中插入一个值时,通过这个sql语句:
insert into Usuario(nome, sobrenome, email, login, senha) values (?, ?, ?, ?, ?)
插入的行没有主键的值。我有一个列 id,根据这个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();
}
}
有人知道我在这里做错了什么吗?我不知道是什么问题。
更新
阅读标记答案后,我验证创建表的代码:
Model object = clazz.newInstance();
String CREATE = "CREATE TABLE " + this.getClazz().getSimpleName() + object.dbFields().toString().replace("[", "(").replace("]", ")");
System.out.println(CREATE);
db.execSQL( CREATE );
发现方法dbFields 不包含id 列的PRIMARY KEY 属性。我解决了这个问题,现在问题解决了。
【问题讨论】:
-
你能发布你的创建表语句
标签: android database sqlite primary-key auto-increment