如何使Android SQLite数据库上的AUTO_INCREMENT?

嘿,我想创build一个AUTO_INCREMENT列的数据库。 但是我不知道如何parsing方法insert中的值。 我只是不知道该怎么parsingAUTO_INCREMENT参数,我parsing了1应该是auto_increment,但我知道它不是我应该parsing。

这里是我声明方法插入的CallDatHelper.java类,以及创build数据库的方法。

package com.psyhclo; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteStatement; import android.util.Log; import java.util.ArrayList; import java.util.List; public class CallDataHelper { private static final String DATABASE_NAME = "calls.db"; private static final int DATABASE_VERSION = 1; private static final String TABLE_NAME = "contact_data"; private Context context; private SQLiteDatabase db; public CallDataHelper(Context context) { this.context = context; OpenHelper openHelper = new OpenHelper(this.context); this.db = openHelper.getWritableDatabase(); } public boolean insert(Integer cId, String cName, String numType, String cNum, String dur, String date, String currTime) { this.db.execSQL("insert into " + TABLE_NAME + "(id, contact_id, contact_name, number_type, contact_number, duration, date, current_time, cont) " + "values( ? ," + cId + ", " + cName + ", " + numType + ", " + cNum + ", " + dur + ", " + date + ", " + currTime + ", ? )"); return true; } public void atualiza(String word) { this.db.execSQL("UPDATE words SET cont = cont + 1 WHERE (word= ?)", new String[] { word }); } public void deleteAll() { this.db.delete(TABLE_NAME, null, null); } public boolean select(String wrd) { String word; Cursor cursor = this.db.query(TABLE_NAME, new String[] { "word" }, "word like ?", new String[] { wrd }, null, null, null); if (cursor.moveToFirst()) { do { word = cursor.getString(0); } while (cursor.moveToNext()); } if (cursor != null && !cursor.isClosed()) { cursor.close(); return true; } else { return false; } } public List<String> selectAll() { List<String> list = new ArrayList<String>(); Cursor cursor = this.db.query(TABLE_NAME, new String[] { "word" }, null, null, null, null, "cont desc"); if (cursor.moveToFirst()) { do { list.add(cursor.getString(0).toUpperCase()); } while (cursor.moveToNext()); } if (cursor != null && !cursor.isClosed()) { cursor.close(); } return list; } private static class OpenHelper extends SQLiteOpenHelper { OpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY AUTOINCREMENT, contact_id INTEGER, contact_name VARCHAR(50), number_type VARCHAR(50), contact_number VARCHAR(50), duration TIME, date DATE, current_time TIME, cont INTEGER)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w("RatedCalls Database", "Upgrading database, this will drop tables and recreate."); db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } } } 

这里是我调用插入方法parsing我想要插入的数据。

 this.dh.insert(1 , 1, contactName, numType, contactNumber, duration, callDate, currTime); 

Related of "如何使Android SQLite数据库上的AUTO_INCREMENT?"

你不必parsing任何东西。 如果该列创build为AUTOINCREMENT ,则只需传递其他值:

 db.execSQL("insert into " + TABLE_NAME + "(contact_id, contact_name, number_type, contact_number, duration, date, current_time, cont) " + "values( "+ cId + ", " + cName + ", " + numType + ", " + cNum + ", " + dur + ", " + date + ", " + currTime + ", ? )"); 

顺便说一下,build议使用Android的insert方法插入数据:

 ContentValues values = new ContentValues(); values.put("contact_id", cId); values.put("contact_name", cName); // etc. db.insert(TABLE_NAME, null, values); 

您不必像在MYSQL中那样专门编写AUTO_INCREMENT

只需要将主键字段定义为_id INTEGER PRIMARY KEY

如果在创build表格时定义了带有INT的主键字段,它将不起作用。 它应该是INTEGER ,就是这样。

插入logging时,如果不为主键字段传递任何值,则会自动将该值增加为唯一值(与MYSQL AUTO_INCREMENT工作方式相同)

this.db.insert(NULL,1,contactName,numType,contactNumber,duration,callDate,currTime);

final static String Database_name =“empDb.db”;

 public DatabaseHelper(Context context) { super(context, Database_name, null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table emp_tbl (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,salary TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS tbl_emp"); } 

获取更多信息https://www.youtube.com/watch?v=W8-Z85oPNmQ博客&#xFF1A; https : //itmulc.blogspot.com/2016/08/android-sqlite-database-with-complete.html