如何在 Android 中插入列表到 table with Dao Room 当有主键时
How to insert a List to a table with Dao Room in Android when there is a primarykey
我有一个数据 class 包含 id 和代码。
我有一个仅包含代码的列表。
如何在不编造id的情况下将代码插入table?
其实我根本不需要id列,但好像Room需要主键,而codes不能作为主键。
房间:
@Entity(tableName = "raw_table")
data class Raw(
@PrimaryKey(autoGenerate = true)
var id: Long = 0L,
@ColumnInfo(name = "code")
var code: String = "",
...
列表和循环:
val codeList : List<String> = ...
for (code in codeList){
// wrong here, I need the id, but I do not have ids.
RawDao.insert(code)
}
- 像下面这样创建一个 Dao(或修改现有的 Dao 以包含 @Insert,如下所示)
:-
@Dao
interface RawDao {
@Insert
fun insertManyRaws(raws: List<Raw>): List<Long>
}
- 正常创建@Database,包括获取RawDao 的抽象函数。例如
:-
@Database(entities = [Raw::class],version = 1)
abstract class RawDatabase: RoomDatabase() {
abstract fun getRawDao(): RawDao
}
然后您可以使用类似的东西:-
class MainActivity : AppCompatActivity() {
lateinit var db: RawDatabase
lateinit var dao: RawDao
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rawList: List<Raw> = arrayListOf(Raw(0L,"Test1"),Raw(0L,"Test2"),Raw(0L,"etc...."))
db = Room.databaseBuilder(this,RawDatabase::class.java,"raw.db")
.allowMainThreadQueries()
.build()
dao = db.getRawDao();
dao.insertManyRaws(rawList) //<<<<<<<<<< ADD All Raws at once
}
}
运行 以上结果为:-
即3 个 Raw 已添加到数据库中,如使用 AS 的数据库检查器所见
- 请注意 dao.insertManyRaws 调用 returns,作为列表,插入的 ID(如果有 -1 则未插入 Raw)
我有一个数据 class 包含 id 和代码。
我有一个仅包含代码的列表。
如何在不编造id的情况下将代码插入table?
其实我根本不需要id列,但好像Room需要主键,而codes不能作为主键。
房间:
@Entity(tableName = "raw_table")
data class Raw(
@PrimaryKey(autoGenerate = true)
var id: Long = 0L,
@ColumnInfo(name = "code")
var code: String = "",
...
列表和循环:
val codeList : List<String> = ...
for (code in codeList){
// wrong here, I need the id, but I do not have ids.
RawDao.insert(code)
}
- 像下面这样创建一个 Dao(或修改现有的 Dao 以包含 @Insert,如下所示)
:-
@Dao
interface RawDao {
@Insert
fun insertManyRaws(raws: List<Raw>): List<Long>
}
- 正常创建@Database,包括获取RawDao 的抽象函数。例如
:-
@Database(entities = [Raw::class],version = 1)
abstract class RawDatabase: RoomDatabase() {
abstract fun getRawDao(): RawDao
}
然后您可以使用类似的东西:-
class MainActivity : AppCompatActivity() {
lateinit var db: RawDatabase
lateinit var dao: RawDao
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rawList: List<Raw> = arrayListOf(Raw(0L,"Test1"),Raw(0L,"Test2"),Raw(0L,"etc...."))
db = Room.databaseBuilder(this,RawDatabase::class.java,"raw.db")
.allowMainThreadQueries()
.build()
dao = db.getRawDao();
dao.insertManyRaws(rawList) //<<<<<<<<<< ADD All Raws at once
}
}
运行 以上结果为:-
即3 个 Raw 已添加到数据库中,如使用 AS 的数据库检查器所见
- 请注意 dao.insertManyRaws 调用 returns,作为列表,插入的 ID(如果有 -1 则未插入 Raw)