(基于:
Android Room:一个数据库多表
和
https://gist.github.com/garcia-pedro-hr/9bb5d286d3ea226234a04109d93d020a )
我有一个包含多个表的 .db 档案,我无法思考如何将其实作到任何应用程序中,我是否应该为 .db 档案中的每个表创建一个物体?即使每个表都包含精确的列?
例子:
table 'b' (
`Id` int(6) UNSIGNED NOT NULL,
`Short` text COLLATE utf8_unicode_ci DEFAULT NULL,
`Full_name` text COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
(上面列出的信息是我从“mySQL 作业台”获得的)
以及表“b”中的一条资料:
(6, 'BBI', 'pow. bie.'),
table 'c'(
`Id` int(6) UNSIGNED NOT NULL,
`Short` text COLLATE utf8_unicode_ci DEFAULT NULL,
`Full_name` text COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
以及表“c”中的一条资料:
(3, 'CT', 'Tor.'),
uj5u.com热心网友回复:
是的
- (基本上必须有一个物体(用@Entity 注释的类也包含在@Database 注释中定义的物体串列中))
,尽管您可以执行以下操作之一来简化问题:-
合并所有表,添加一列指示原始表。您可以使用prePackagedDatabaseCallback来组合表(或相应地准备预打包的数据库)。
使用单个基类并扩展该类,例如
:-
class BaseTable {
@PrimaryKey
Long id;
@ColumnInfo(name = "short", collate = UNICODE /*? need to check out Room's UNICODE v requirements */ )
String shrt;
String full_name;
}
和 :-
@Entity(tableName = "b")
class TableB extends BaseTable {
}
和 :-
@Entity(tableName = "c")
class TableC extends BaseTable{
}
使用@Database 注释的类包括物体串列中的 TableB 和 TableC,例如:-
@Database(entities = {TableB.class,TableC.class},version = 1)
Room 生成一个与用@Database 注释的类同名但后缀为 _Impl 的类,其中有一个名为 createAllTables 的方法,使用上面的方法是:-
@Override
public void createAllTables(SupportSQLiteDatabase _db) {
_db.execSQL("CREATE TABLE IF NOT EXISTS `b` (`id` INTEGER, `short` TEXT COLLATE UNICODE, `full_name` TEXT, PRIMARY KEY(`id`))");
_db.execSQL("CREATE TABLE IF NOT EXISTS `c` (`id` INTEGER, `short` TEXT COLLATE UNICODE, `full_name` 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, '1beb9a18d3900d11d1aa0e29c22c5208')");
}
统一编码/UTF
请注意,您可能必须检查您的整理要求(Room 似乎没有对 UNICODE 选项说太多),但您可能会发现以下内容在这方面很有用:-
https://sqlite.org/version3.html(请参阅对 UTF-8 和 UTF-16 的支持)
https://sqlite.org/pragma.html#pragma_encoding
https://www.sqlite.org/datatype3.html#collat??ion
https://developer.android.com/reference/androidx/room/ColumnInfo#summary
- 摘自https://www.sqlite.org/lang_expr.html#the_like_glob_regexp_and_match_operators
0 评论