检索 SQL 房间 Android 生成的查询
Retrieve SQL queries generated with Room Android
如何检索Room Android生成的所有SQLqueries
?
吾道class:
@Dao
public interface MyDao {
@Query("SELECT * FROM user WHERE age > :minAge")
public User[] loadAllUsersOlderThan(int minAge);
}
我想检索 @Query
注释的内容。
我知道我可以使用注释处理器,但这不允许我检索用于创建数据库表的查询以及从 @Insert
、@Update
和 [=17= 生成的查询].
我想在 Node.JS
中使用 sqlite3 在另一个应用程序中重复使用这些查询。
编辑:
我想以编程方式检索 queries
以防止将它们写入两次,一次用于 android 应用程序,另一次用于 Node.JS
应用程序。
你可以通过yourDao(s)后缀为_impl和your@的生成代码获取所有查询DatabaseClass(s) 也以 _impl
为后缀
例如对于
@Dao
public interface CustomerDao {
@Insert
long insert(Customer customer);
@Query("INSERT INTO Customer (firstname, lastName, dateAdded) VALUES(:firstName,:lastName,:dateAdded)")
long insert(String firstName, String lastName, String dateAdded);
@Query("SELECT * FROM customer WHERE firstName=:firstName AND lastName = :lastName")
Customer getCustomerByName(String firstName, String lastName);
@Query("SELECT * FROM customer")
LiveData<List<Customer>> getAllCustomers();
}
那么CustomerDao_Impl就是:-
@SuppressWarnings({"unchecked", "deprecation"})
public final class CustomerDao_Impl implements CustomerDao {
private final RoomDatabase __db;
private final EntityInsertionAdapter<Customer> __insertionAdapterOfCustomer;
private final SharedSQLiteStatement __preparedStmtOfInsert;
public CustomerDao_Impl(RoomDatabase __db) {
this.__db = __db;
this.__insertionAdapterOfCustomer = new EntityInsertionAdapter<Customer>(__db) {
@Override
public String createQuery() {
return "INSERT OR ABORT INTO `Customer` (`id`,`firstName`,`lastName`,`dateAdded`) VALUES (?,?,?,?)";
}
..........
和 ShopDatabase
@Database(entities = {Customer.class}, version = 1)
//@TypeConverters({Converters.class})
public abstract class ShopDatabase extends RoomDatabase {
private static ShopDatabase instance;
..........
那么ShopDatabase_Impl就是:-
@SuppressWarnings({"unchecked", "deprecation"})
public final class ShopDatabase_Impl extends ShopDatabase {
private volatile CustomerDao _customerDao;
@Override
protected SupportSQLiteOpenHelper createOpenHelper(DatabaseConfiguration configuration) {
final SupportSQLiteOpenHelper.Callback _openCallback = new RoomOpenHelper(configuration, new RoomOpenHelper.Delegate(1) {
@Override
public void createAllTables(SupportSQLiteDatabase _db) {
_db.execSQL("CREATE TABLE IF NOT EXISTS `Customer` (`id` INTEGER, `firstName` TEXT, `lastName` TEXT, `dateAdded` TEXT, PRIMARY KEY(`id`))");
_db.execSQL("CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)");
_db.execSQL("INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '588832abfd9fd9c6aad8dcebe485e219')");
}
@Override
public void dropAllTables(SupportSQLiteDatabase _db) {
_db.execSQL("DROP TABLE IF EXISTS `Customer`");
if (mCallbacks != null) {
for (int _i = 0, _size = mCallbacks.size(); _i < _size; _i++) {
mCallbacks.get(_i).onDestructiveMigration(_db);
}
}
}
..........
您可能不想要 room_master_table,因为它是特定于房间的,而且哈希是从代码生成的,我相信,因此对所做的更改很敏感。
- 其中 .......... 表示为简洁起见省略的代码
如果其他人想要自动导出所有查询,我所做的不是在我的每个 DaoClassName_Impl 中手动获取它们,而是导出我的房间数据库模式然后处理json 文件已导出。如果你想在android studio中创建一个java模块以便于重用,我建议创建一个注释处理器(即使它不处理任何注释)每次构建项目时都会自动 运行。
如何检索Room Android生成的所有SQLqueries
?
吾道class:
@Dao
public interface MyDao {
@Query("SELECT * FROM user WHERE age > :minAge")
public User[] loadAllUsersOlderThan(int minAge);
}
我想检索 @Query
注释的内容。
我知道我可以使用注释处理器,但这不允许我检索用于创建数据库表的查询以及从 @Insert
、@Update
和 [=17= 生成的查询].
我想在 Node.JS
中使用 sqlite3 在另一个应用程序中重复使用这些查询。
编辑:
我想以编程方式检索 queries
以防止将它们写入两次,一次用于 android 应用程序,另一次用于 Node.JS
应用程序。
你可以通过yourDao(s)后缀为_impl和your@的生成代码获取所有查询DatabaseClass(s) 也以 _impl
为后缀例如对于
@Dao
public interface CustomerDao {
@Insert
long insert(Customer customer);
@Query("INSERT INTO Customer (firstname, lastName, dateAdded) VALUES(:firstName,:lastName,:dateAdded)")
long insert(String firstName, String lastName, String dateAdded);
@Query("SELECT * FROM customer WHERE firstName=:firstName AND lastName = :lastName")
Customer getCustomerByName(String firstName, String lastName);
@Query("SELECT * FROM customer")
LiveData<List<Customer>> getAllCustomers();
}
那么CustomerDao_Impl就是:-
@SuppressWarnings({"unchecked", "deprecation"})
public final class CustomerDao_Impl implements CustomerDao {
private final RoomDatabase __db;
private final EntityInsertionAdapter<Customer> __insertionAdapterOfCustomer;
private final SharedSQLiteStatement __preparedStmtOfInsert;
public CustomerDao_Impl(RoomDatabase __db) {
this.__db = __db;
this.__insertionAdapterOfCustomer = new EntityInsertionAdapter<Customer>(__db) {
@Override
public String createQuery() {
return "INSERT OR ABORT INTO `Customer` (`id`,`firstName`,`lastName`,`dateAdded`) VALUES (?,?,?,?)";
}
..........
和 ShopDatabase
@Database(entities = {Customer.class}, version = 1)
//@TypeConverters({Converters.class})
public abstract class ShopDatabase extends RoomDatabase {
private static ShopDatabase instance;
..........
那么ShopDatabase_Impl就是:-
@SuppressWarnings({"unchecked", "deprecation"})
public final class ShopDatabase_Impl extends ShopDatabase {
private volatile CustomerDao _customerDao;
@Override
protected SupportSQLiteOpenHelper createOpenHelper(DatabaseConfiguration configuration) {
final SupportSQLiteOpenHelper.Callback _openCallback = new RoomOpenHelper(configuration, new RoomOpenHelper.Delegate(1) {
@Override
public void createAllTables(SupportSQLiteDatabase _db) {
_db.execSQL("CREATE TABLE IF NOT EXISTS `Customer` (`id` INTEGER, `firstName` TEXT, `lastName` TEXT, `dateAdded` TEXT, PRIMARY KEY(`id`))");
_db.execSQL("CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)");
_db.execSQL("INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '588832abfd9fd9c6aad8dcebe485e219')");
}
@Override
public void dropAllTables(SupportSQLiteDatabase _db) {
_db.execSQL("DROP TABLE IF EXISTS `Customer`");
if (mCallbacks != null) {
for (int _i = 0, _size = mCallbacks.size(); _i < _size; _i++) {
mCallbacks.get(_i).onDestructiveMigration(_db);
}
}
}
..........
您可能不想要 room_master_table,因为它是特定于房间的,而且哈希是从代码生成的,我相信,因此对所做的更改很敏感。
- 其中 .......... 表示为简洁起见省略的代码
如果其他人想要自动导出所有查询,我所做的不是在我的每个 DaoClassName_Impl 中手动获取它们,而是导出我的房间数据库模式然后处理json 文件已导出。如果你想在android studio中创建一个java模块以便于重用,我建议创建一个注释处理器(即使它不处理任何注释)每次构建项目时都会自动 运行。