android左连接与房间查询

我正在尝试更改我的sqlite数据库与房间库。我有点困惑与左连接查询。android左连接与房间查询

我已经用sqlite实现了它,但不知道如何才能达到同样的房间?

这里是我创建表:

第一个表:通知

db.execSQL("CREATE TABLE IF NOT EXISTS $TABLE_NAME ($COLUMN_ID INTEGER PRIMARY KEY, $ICON TEXT, $TITLE INTEGER," + 

" $DATE INTEGER, $TYPE INTEGER,$URL TEXT, $MESSAGE INTEGER, FOREIGN KEY($TITLE) REFERENCES ${TableNotificationsTrans.getTableName(this)}(id)," +

"FOREIGN KEY($MESSAGE) REFERENCES ${TableNotificationsTrans.getTableName(this)}(id))")

第二张表:Notification_Trans

db.execSQL("CREATE TABLE IF NOT EXISTS $TABLE_NAME ($COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, $COLUMN_EN TEXT, $COLUMN_GU TEXT, $COLUMN_HI TEXT)") 

我在做什么是我保存通知中通知表,但其名称和说明将以特定语言存储在notification_trans中。

查询实现

DatabaseHelper.database!!.rawQuery("SELECT A.$COLUMN_ID, A.$ICON, N.${language.toLowerCase()} $TITLE, A.$DATE, A.$TYPE, A.$URL, M.${language.toLowerCase()} $MESSAGE FROM $TABLE_NAME A LEFT JOIN NotificationsTrans N ON A.$TITLE = N.id LEFT JOIN NotificationsTrans M ON A.$MESSAGE = M.id ORDER BY $DATE DESC LIMIT $pageNum*10, 10", null) 

问题

How can I achieve same with room? 

编辑

我的应用程序是多语言的应用程序,在这里我得到通知标题与特定的语言,l ike印地文或古吉拉特语。我在通知表中存储通知详细信息,同时标题notification_trans。

NotificationTrans有id,英文,印地文,古吉拉特语的专栏。

当用户询问古吉拉特语时,我正在从notificationTrans的列gujarati中重新获取通知标题。

我可以这样做,在sqlite中。

但现在我想它

回答:

首先你必须做模型类两种,您可能已经宣告他们,你只需要进行一些更改,如果他们已经存在。

@Entity 

public class Notification {

@PrimaryKey

int id;

String icon;

@ForeignKey(entity = Notification_Trans.class, parentColumns = "col_id", childColumns = "id")

String title;

int date;

int type;

String url;

int msg;

}

@Entity

public class Notification_Trans {

@PrimaryKey(autoGenerate = true)

int col_id;

String column_en;

String column_gu;

String column_hi;

这使得你的POJO,我不明白你的外键约束,所以原谅我说,你认为合适,你可以进行更改。 你可以宣布你的DAO按查询this` @Dao

public interface DAO { 

@Query("SELECT note.id, note.title, note.description, category.name as categoryName " +

"FROM note " +

"LEFT JOIN category ON note.category_id = category.id")

List getCategoryNotes();

}

`

我还没有做出改变,我发现在Link here。由于你的查询是一个复杂的问题,但它会给你一个关于如何做到这一点的想法。, 在此之后,你只需要从数据库类对象来访问你的DAO接口,它将处理创造&所有其他东西的房间,像这样的below`

@Database(entities = {Notification.class, NotificationTrans.class}, version = 3) 

public abstract class AppDatabase extends RoomDatabase {

private static AppDatabase instance;

public static AppDatabase getAppDatabase(Context context) {

if (instance == null) {

instance =

Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "database_name")

// allow queries on the main thread.

// Don't do this on a real app! See PersistenceBasicSample for an example.

//.allowMainThreadQueries()

.fallbackToDestructiveMigration()

.build();

}

return instance;

}

public static void destroyInstance() {

instance = null;

}

public abstract Dao notificationDao();

它有助于创建数据库单独的类,&跟踪它的对象。 &你可以用AppDatabase.getAppDatabase(context).notificationDao().yourQueryMethodName();

访问您的数据,您可能需要参考this理解房间之间的关系,&实现您的要求,

编辑1: 这是你的DAO应该怎么样子,`

@Insert 

void insert(Notifications object);

//这将插入一个项目

@Insert 

void insertAll(Notifications... objects);

虽然这可以输入数据的列表,

你可以在这里调用此方法与数据库对象,像AppDatabase.getAppDatabase(context).notificationDao().yourQueryMethodName()代替yourQueryMethod(),如果调用insert() &传给你需要在数据库中存储的对象,它会这样做,

For Eg db.parcelDao().insert(parcel); 这是我如何在我的ParcelDao中插入Data,db是Database对象,& parcel是需要存储数据的对象。还有一件事,你不能在主线程中调用这个方法,所以你可能需要使用Handler或者AsyncTask来实现这个目的,对不起,我忘了提及这个。 查看房间Training at Android Developers实现房间的基本功能

以上是 android左连接与房间查询 的全部内容, 来源链接: utcz.com/qa/261245.html

回到顶部