如何在Kotin中使用Anko设计SQLite表?

我在Kotlin中使用Anko设计了一个非常简单的表格,表格中有一个名为_id的主键,我希望_id是由SQLite系统自动传递的值。 我已经阅读了一些示例代码,但是我不知道哪一个是正确的,方法1,方法2还是方法3?

还有更多,当我插入一个记录时,我不认为我需要传递一个值给_id,但是MSetting和DBSetting的_id属性必须传递值,所以我必须用MSetting(10L,"My Settings",2000L,"This is description!")我不知道Anko如何处理不必要的_id,我很奇怪,当执行SettingManage().addSetting(MSetting(10L,"My Settings",2000L,"This is description!"))时,应用程序不会崩溃SettingManage().addSetting(MSetting(10L,"My Settings",2000L,"This is description!"))重复!

方法1:将 DBSettingTable._ID to INTEGER + PRIMARY_KEY+ UNIQUE,

方法2:将 DBSettingTable._ID to INTEGER + PRIMARY_KEY+ AUTOINCREMENT,

方法3: DBSettingTable._ID to INTEGER + PRIMARY_KEY,

插入数据

 SettingManage().addSetting(MSetting(10L,"My Settings",2000L,"This is description!")) 

设计表

 class DBSettingHelper(mContext: Context = UIApp.instance) : ManagedSQLiteOpenHelper( mContext, DB_NAME, null, DB_VERSION) { companion object { val DB_NAME = "setting.db" val DB_VERSION = 5 val instance by lazy { DBSettingHelper() } } override fun onCreate(db: SQLiteDatabase) { db.createTable( DBSettingTable.TableNAME , true, DBSettingTable._ID to INTEGER + PRIMARY_KEY, DBSettingTable.Name to TEXT, DBSettingTable.CreatedDate to INTEGER, DBSettingTable.Description to TEXT ) } override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { db.dropTable(DBSettingTable.TableNAME, true) onCreate(db) } } class DBSetting(val mMutableMap: MutableMap) { var _id: Long by mMutableMap var name: String by mMutableMap var createdDate: Long by mMutableMap var description: String by mMutableMap constructor(_id: Long, name: String, createdDate: Long, description: String) : this(HashMap()) { this._id = _id this.name = name this.createdDate = createdDate this.description=description } } object DBSettingTable { val TableNAME = "SettingTable" val _ID = "_id" val Name = "name" val CreatedDate = "createdDate" val Description="description" } 

商业逻辑

 class SettingManage { fun addSetting(mMSetting:MSetting){ DBSettingManage().addDBSetting(DbDataMapper().convertMSetting_To_DBSetting(mMSetting)) } } class DBSettingManage(private val mDBSettingHelper: DBSettingHelper =DBSettingHelper.instance) { fun addDBSetting(mDBSetting: DBSetting)=mDBSettingHelper.use{ insert(DBSettingTable.TableNAME,*mDBSetting.mMutableMap.toVarargArray()) } } class DbDataMapper { fun convertMSetting_To_DBSetting(mMSetting: MSetting) =with(mMSetting){ DBSetting(_id,name,createdDate,description) } fun convertDBSetting_To_MSetting(mDBSetting: DBSetting)=with(mDBSetting){ MSetting(_id,name,createdDate,description ) } } fun  SelectQueryBuilder.parseList(parser: (Map) -> T): List = parseList(object : MapRowParser { override fun parseRow(columns: Map): T = parser(columns) })