android 怎么实现附加现有数据库?而不是每次安装的时候都创建
android 如何实现附加现有数据库?而不是每次安装的时候都创建
android 如何实现附加现有数据库?而不是每次安装的时候都创建新的数据库。
最近做一个应用,在数据库中要内置很多数据,但有不想在每次安装的时候都重新创建数据库并插入数据,原因是插入数据时间较长,用户体验不好,所以特地想问问大家,有没有什么办法,让我一次吧数据库的内容都填充好,再以后的安装过程中不用再重新创建数据库了,类似sqlserver中的附加数据库!
------最佳解决方案--------------------
不是每次进入程序的时候都直接读取现有数据库么?难道你不能把多个数据库整合为1,2个么?不然再好的方法,你这样总是每次都插入,都会影响效率的,就算放在子线程中去做也一样。(如果数据库不大,可以忽略)
------其他解决方案--------------------
http://topic.****.net/u/20101123/17/7ced9a3c-7d6a-4478-ae19-1b37136d40b5.html?91014
------其他解决方案--------------------
哦,你的意思是不是说,把数据库文件直接打包到apk中,然后程序里就不创建了,直接去读取这个数据库文件?
如果是这样,那可以把数据库文件xx.db,放在assets目录,程序中访问:
AssetManager am = context.getAssets();
InputStream is = am.open(fileName);
------其他解决方案--------------------
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null); //打开数据库
databaseFilename="/sdcard/crazynovel/crazynovel.db" //这是路径
你这个是创建一个数据库,并不是打开你资源文件里面的数据库,当然是空的。
建议:先将你的数据库里面的数据处理好,放到你的资源文件夹下面,比如asset或则res-raw(这个得自己创建),然后通过文件流的方式将其写到你的手机上面,不管是sdcard还是内存。然后再打开这个数据库即可。
------其他解决方案--------------------
你去查看android的APK备份机制吧,APK里代码和用户数据是可以分别设置是否备份的,
这里你就备份个数据库文件就可以了,下次安装就只要更新APK里代码就OK了,
具体我也没实现,你可以按照这个思路去查查资料,网上有很多的。
------其他解决方案--------------------
这个我做过,谈下经验。你可以先拿工具做个数据库,在windows下有做sqlite数据库的图形界面工具。我用的sqliteadmin。把你做好的数据库放在asset目录下或者res/raw目录下,然后程序一开始就检查data目录下是否存在数据库,不存在就把你的数据库拷到data目录下,存在的话就可以直接操作数据库了。当然你可以把你的数据库放在任意你想放的地方,比如sd卡。这样你的程序只在第一次运行的时候会拷贝数据库,以后就直接读库,不会有拷贝的操作,程序反应就很快了。
其实我对楼主的问题有个疑问,即使是程序创建数据库,也不是每次启动就插数据啊。你程序第一次启动就会在默认目录下创建数据库并初始化(如果你有初始化动作的话),以后也是在此基础上进行增删查找的。难道你的程序每次关闭的时候都干掉数据库?不懂,求解。
------其他解决方案--------------------
看这里
http://www.cnblogs.com/zhegebucuo/archive/2010/09/11/1823964.html
------其他解决方案--------------------
支持,这个很实用。
------其他解决方案--------------------
请教下楼主,为什么我用SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
databaseFilename, null);
得到的database 是null呢?
------其他解决方案--------------------
看来我还是一只小菜鸟
------其他解决方案--------------------
我是指安装apk的时候。能不能把已有的数据库附到apk包中
------其他解决方案--------------------
仍旧不是我想要的,上面的文章讲的是如何不覆盖安装。而我的需求是在第一安装的时候,apk中的数据库包含有数据。而不是在安装的时候先创建数据库,创建表,然后再插入数据。
android 如何实现附加现有数据库?而不是每次安装的时候都创建新的数据库。
最近做一个应用,在数据库中要内置很多数据,但有不想在每次安装的时候都重新创建数据库并插入数据,原因是插入数据时间较长,用户体验不好,所以特地想问问大家,有没有什么办法,让我一次吧数据库的内容都填充好,再以后的安装过程中不用再重新创建数据库了,类似sqlserver中的附加数据库!
------最佳解决方案--------------------
不是每次进入程序的时候都直接读取现有数据库么?难道你不能把多个数据库整合为1,2个么?不然再好的方法,你这样总是每次都插入,都会影响效率的,就算放在子线程中去做也一样。(如果数据库不大,可以忽略)
------其他解决方案--------------------
http://topic.****.net/u/20101123/17/7ced9a3c-7d6a-4478-ae19-1b37136d40b5.html?91014
------其他解决方案--------------------
哦,你的意思是不是说,把数据库文件直接打包到apk中,然后程序里就不创建了,直接去读取这个数据库文件?
如果是这样,那可以把数据库文件xx.db,放在assets目录,程序中访问:
AssetManager am = context.getAssets();
InputStream is = am.open(fileName);
------其他解决方案--------------------
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null); //打开数据库
databaseFilename="/sdcard/crazynovel/crazynovel.db" //这是路径
你这个是创建一个数据库,并不是打开你资源文件里面的数据库,当然是空的。
建议:先将你的数据库里面的数据处理好,放到你的资源文件夹下面,比如asset或则res-raw(这个得自己创建),然后通过文件流的方式将其写到你的手机上面,不管是sdcard还是内存。然后再打开这个数据库即可。
------其他解决方案--------------------
你去查看android的APK备份机制吧,APK里代码和用户数据是可以分别设置是否备份的,
这里你就备份个数据库文件就可以了,下次安装就只要更新APK里代码就OK了,
具体我也没实现,你可以按照这个思路去查查资料,网上有很多的。
------其他解决方案--------------------
这个我做过,谈下经验。你可以先拿工具做个数据库,在windows下有做sqlite数据库的图形界面工具。我用的sqliteadmin。把你做好的数据库放在asset目录下或者res/raw目录下,然后程序一开始就检查data目录下是否存在数据库,不存在就把你的数据库拷到data目录下,存在的话就可以直接操作数据库了。当然你可以把你的数据库放在任意你想放的地方,比如sd卡。这样你的程序只在第一次运行的时候会拷贝数据库,以后就直接读库,不会有拷贝的操作,程序反应就很快了。
其实我对楼主的问题有个疑问,即使是程序创建数据库,也不是每次启动就插数据啊。你程序第一次启动就会在默认目录下创建数据库并初始化(如果你有初始化动作的话),以后也是在此基础上进行增删查找的。难道你的程序每次关闭的时候都干掉数据库?不懂,求解。
------其他解决方案--------------------
看这里
http://www.cnblogs.com/zhegebucuo/archive/2010/09/11/1823964.html
------其他解决方案--------------------
支持,这个很实用。
------其他解决方案--------------------
请教下楼主,为什么我用SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
databaseFilename, null);
得到的database 是null呢?
------其他解决方案--------------------
看来我还是一只小菜鸟
------其他解决方案--------------------
我是指安装apk的时候。能不能把已有的数据库附到apk包中
------其他解决方案--------------------
仍旧不是我想要的,上面的文章讲的是如何不覆盖安装。而我的需求是在第一安装的时候,apk中的数据库包含有数据。而不是在安装的时候先创建数据库,创建表,然后再插入数据。