android中数据库 用mysql的多,如何从Android Room中的多个数据库中选择(如何附加数据库)...

As you know we can select from multiple databases using attach command like this:

String path = DBHelper.getDatabasePath(context);

String sql = "ATTACH DATABASE '" + path + "/" + dbname.toString()

+ ".db' AS \"" + dbname.toString() + "\";";

db.execSQL(sql);

Then by using Cursor, we can do select from them.

By using Android Room, How can I do this? Is there any attachment or similar command to do this?

解决方案

Can use this code for attach another database

@Database(entities = {Book.class, User.class}, version = 1)

public abstract class LoanDatabase extends RoomDatabase {

public abstract UserDao userDao();

public abstract BookDao bookDao();

private static LoanDatabase INSTANCE;

public static LoanDatabase getInstance(Context context,final String attachDatabaseName) {

if (INSTANCE == null) {{

INSTANCE = Room.databaseBuilder(context,

LoanDatabase.class, "LoanDatabase").addCallback(new Callback() {

@Override

public void onOpen(@NonNull SupportSQLiteDatabase db) {

attach(attachDatabaseName,"/data/data/com.test.roomwithdagger/databases/");

super.onOpen(db);

}

})

.build();

}}

return INSTANCE;

}

private static void attach(final String databaseName, final String databasePath) {

String sql = "ATTACH DATABASE '" + databasePath + databaseName

+ "' AS \"" + databaseName + "\";";

INSTANCE. mDatabase.execSQL(sql);

}

}

public void attachDatabase(String databaseName,String databasePath){

String sql = "ATTACH DATABASE '" + databasePath + "/" + databaseName

+ ".db' AS \"" + databaseName + "\";";

INSTANCE.mDatabase.execSQL(sql);

}

}

In Dao interface use @SkipQueryVerification for skip query verification like this.

@Dao

public interface BookDao {

...

@SkipQueryVerification

@Query("SELECT * FROM main.Book b INNER JOIN LoanDatabase1.Loan l on b.Id=l.BookId where b.Id=:bookId")

Book getBookAndLoan(int bookId);

...

}

Use :

LoanDatabase db = LoanDatabase.getInstance(this,"LoanDatabase1")

Book book= db.bookDao().getBookAndLoan(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值