你不需要使用另一个类,你可以使用@Query
作为便利的替代方案@Insert
.
按照 :-
查询方法支持 4 种类型的语句:SELECT、INSERT、UPDATE 和 DELETE。Query https://developer.android.com/reference/androidx/room/Query
e.g.
@Query("INSERT INTO test_table001 (name) VALUES(:name) ")
void insert(String name);
您也不限于 CURRENT_TIMESTAMP 作为获取当前时间戳的唯一方法,您可以使用嵌入式日期时间函数(如下所示),它可以更有效地存储值并且也更灵活,例如您可以使用“+7 天”等修饰符调整当前时间.
如果您考虑以下因素:-
@Entity(tableName = "test_table001")
public class TestTable001 {
@PrimaryKey
Long id;
@ColumnInfo(defaultValue = "CURRENT_TIMESTAMP")
String dt1;
@ColumnInfo(defaultValue = "(datetime('now'))")
String dt2;
@ColumnInfo(defaultValue = "(strftime('%s','now'))")
String dt3;
String name;
}
- 注意效率低下
autogenerate = true
尚未使用,但正如将要显示的那样,您仍然可以拥有 SQLite 分配的 id(请注意,您必须使用 Long/Integer 类型,而不是 long 或 int)
- 另请注意获取当前日期时间的替代方法(后者更有效,因为该值最终将存储为整数(最大 8 字节)而不是更多字节的字符串)。
以道为:-
@Dao
public interface TestTable001Dao {
@Insert()
long insert(TestTable001 testTable001);
@Query("INSERT INTO test_table001 (name) VALUES(:name) ")
long insert(String name);
@Query("SELECT * FROM test_table001")
List<TestTable001> getAllTestTable001();
}
以及以下要测试/演示的内容:-
public class MainActivity extends AppCompatActivity {
AppDatabase mRoomDB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRoomDB = Room.databaseBuilder(this,AppDatabase.class,"testdb")
.allowMainThreadQueries()
.build();
TestTable001 tt01 = new TestTable001();
tt01.setName("tt01");
mRoomDB.useTestTable001().insert(tt01);
mRoomDB.useTestTable001().insert("tt02");
logAllTestTable001();
}
private void logAllTestTable001() {
for (TestTable001 tt: mRoomDB.useTestTable001().getAllTestTable001()) {
Log.d(
"TTINFO",
"ID = " + tt.getId() +
" Name = " + tt.getName() +
" Date1 = " + tt.getDt1() +
" Date2 = " + tt.getDt2() +
" Date3 = " + tt.getDt3());
}
}
}
结果是:-
2019-12-14 03:18:32.569 D/TTINFO: ID = 1 Name = tt01 Date1 = null Date2 = null Date3 = null
2019-12-14 03:18:32.569 D/TTINFO: ID = 2 Name = tt02 Date1 = 2019-12-13 16:18:32 Date2 = 2019-12-13 16:18:32 Date3 = 1576253912