【发布时间】:2017-12-18 06:37:48
【问题描述】:
我正在尝试使用房间库更改我的 sqlite 数据库。我对左连接查询有点困惑。
我已经用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 表中,但其名称和描述将以特定语言存储在 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?
编辑
我的应用程序是多语言应用程序,我会在其中收到特定语言的通知标题,例如印地语或古吉拉特语。我将通知详细信息存储在 notification 表中,而标题存储在 notification_trans 中。
NotificationTrans 有 id、english、hindi、gujarati 列。
当用户询问古吉拉特语时,我正在从 notificationTrans 的古吉拉特语列中检索通知标题。
我可以这样做,在 sqlite 中。
但现在我想要房间
【问题讨论】:
-
如果你有一个静态查询,你会在 Room 中使用它,就像在 SQLite 中使用它一样。在您的情况下,您正在使用字符串插值来生成查询,在这种情况下 Room 无法帮助您。
标签: android database android-room kotlin-android-extensions