Android 在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

在我当前的android项目中,当我尝试通过以下sql语句在sqlite数据库中插入值时:

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 );