Android 在sqlite数据库上插入不生成主键
在我当前的android项目中,当我尝试通过以下sql语句在sqlite数据库中插入值时:Android 在sqlite数据库上插入不生成主键,android,database,sqlite,primary-key,auto-increment,Android,Database,Sqlite,Primary Key,Auto Increment,在我当前的android项目中,当我尝试通过以下sql语句在sqlite数据库中插入值时: insert into Usuario(nome, sobrenome, email, login, senha) values (?, ?, ?, ?, ?) 插入的行没有主键的值。我有一个列id,根据这一点,它是ROWID的别名,应该自动填充,但不会发生 执行此插入的代码是: public void insert(String[] data) { try { Model ob
insert into Usuario(nome, sobrenome, email, login, senha) values (?, ?, ?, ?, ?)
插入的行没有主键的值。我有一个列id,根据这一点,它是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();
}
}
并发现方法dbFields不包含id列的主键属性。我解决了这个问题,现在问题解决了。您可以验证数据库表的主键上是否激活了“自动递增”选项…您必须将列id设置为主键-您可能会错过这一点。主键定义为整数时的默认行为是自动递增 在模式定义中,使用[_id]整数主键,表示只对整数主键列进行自动递增 evem更为明确: 仅当声明的类型名称为整数时,主键列才成为整数主键。其他整数类型名称(如INT或BIGINT、SHORT integer或UNSIGNED integer)会导致主键列作为具有整数相关性和唯一索引的普通表列,而不是rowid的别名
我怎样才能证实这一点?如果它没有被激活,我怎么激活呢?默认行为是自动递增的。你可以发布你的create table语句吗?不是所有的主键都是自动递增的。而且它不需要命名为_id。是的。。我的意思是只有整数主键。。我也给出了定义。现在,我在括号中再次添加了相同的内容。。谢谢
Model object = clazz.newInstance();
String CREATE = "CREATE TABLE " + this.getClazz().getSimpleName() + object.dbFields().toString().replace("[", "(").replace("]", ")");
System.out.println(CREATE);
db.execSQL( CREATE );