Insert large initial data to sqlite database in android
我的应用程序将包含一个大数据库,那么如何插入数据? 我想在PC上做这个,然后把它放在应用程序中,因为它有很多数据。
我已经看到帖子将初始数据插入到sql lite android /将自己的SQLite数据库添加到android应用程序/使用数据库发送应用程序
但我不明白或不确定它是最好的方法。
-
我将此问题标记为关闭/重复,因为没有关于为什么此解决方案不适合您的情况,或者您未能如何实施它的信息。
-
伙计们,你们正在向我发送2009年的解决方案,并拒绝让社区找到一个新的解决方案。老实说,我不喜欢这个解决方案,我也不喜欢通用软件解决方案。请解开这个问题。
-
问题已经结束,因为你的问题中没有任何内容表明另一个答案会更合适。您应该尝试解释您尝试过的内容,为什么此解决方案不起作用/不适合您的解决方案。大家都知道,我已经将这个解决方案用于了几个应用程序,但仍然可以。
-
我不喜欢的是:1数据库复制将使用两倍的空间。 2:它使用自定义函数,公共函数oncreate和on upgrade是空的,你必须使用那些createdatabase()和opendatabase()(这个我不知道它做了什么,为什么它说openreadonly),以及?主要活动的创造?
-
然后什么 ?我必须使用getredabledatabase()或可写吗?然后我可以使用execSQL / rawQuery吗?
-
1 /是,在您的申请中和提取后。除非您从服务器下载数据库,否则无法解决此问题。 2 / oncreate和onupgrade是空的,因为你没有让android为你创建和升级数据库,因为你首先导入它。我不明白你的其他问题,一旦数据库到位,你就像任何其他数据库一样使用。 readable如果你需要阅读它,writable写入它...它的行为与任何其他数据库一样。除了创建/复制部分之外没有区别。
-
详细说明1 / apk不可编辑。你放在你的apk中的任何东西永远不会被修改。由于apk文件的性质,访问此数据是特别的。为了完全访问您将在apk中集成的数据库,您需要将其复制到外部,因此大小重复。
-
详细说明2 / onCreate和onUpgrade是android使用的回调,通知你已经创建了一个db文件,需要在其中放入一些东西,或者你已经更改了db的版本号,并且可能想要升级表。对于已发布的数据库,没有必要进行这些回调,因为初始数据库中的结构通常是固定的。但是,在某些情况下可以使用onUpgrade。 (这两点都可能是一个实际问题的对象,可能有几个答案,如果他们真的被问到)
-
还是查询()?我觉得它的"超出了标准",也许没有标准......但我想能够讨论这个问题!
-
好的,谢谢你的帮助njzk2!亲切的!还有一个问题,在他所说的文章中,"调用createDataBase()和openDataBase()方法",什么时候?创造活动?或者每次我需要数据库?
您可以将数据库包含资源中所需的所有数据,然后使用此值启动应用程序。
首先,您需要在项目中创建一个"资产"文件夹
创建自己的数据库帮助程序(扩展SQLiteOpenHelper)
然后你将实现一个"复制"方法,类似于:
private void copyDatabase(String dbname,Context context)抛出IOException {
1 2 3 4 5 6 7 8 9 10 11 12
| InputStream is = context.getAssets().open(dbname);
String outFileName = DB_PATH + dbname;
OutputStream out = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
is.close();
out.flush();
out.close();
} |
如果您有大量数据,那么运送准备好的数据库的选项是最好的。 首次启动时,启动时间将缩短。 毕竟,这是最简单的一个。