背景
把在工程中测试好的数据库信息碎apk一起发布,但是数据库不会自动安装,尤其里面内容很多的时候,不可能再去每个apk里面再写创建数据库,再写插入数据。
那么这样的话只能将写工程时候的数据库sqlite随apk一起发布了。
要点
- 将随apk发布的数据库放在android工程下/res/raw路径下。
- 数据库文件存到手机上时,路径在/data/data/包名/databases下,其他路径则会出错。
代码
public class TestSqlDatabase{ private static final String DATABASE_PATH = "/data/data/your.package.name/databases"; private static final int DATABASE_VERSION = 0; private static final String DATABASE_NAME = "test.db"; private static String outFileName = DATABASE_PATH + "/" + DATABASE_NAME; private Context context; private SQLiteDatabase database; public TestSqlDatabase(Context context) { this.context = context; File file = new File(outFileName); if (file.exists()) { database = SQLiteDatabase.openOrCreateDatabase(outFileName, null); if (database.getVersion() != DATABASE_VERSION) { database.close(); file.delete(); } } try { buildDatabase(); } catch (Exception e) { e.printStackTrace(); } } private void buildDatabase() throws Exception{ InputStream myInput = context.getResources().openRawResource(R.raw.test); File file = new File(outFileName); File dir = new File(DATABASE_PATH); if (!dir.exists()) { if (!dir.mkdir()) { throw new Exception("创建失败"); } } if (!file.exists()) { try { OutputStream myOutput = new FileOutputStream(outFileName); byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } myOutput.close(); myInput.close(); } catch (Exception e) { e.printStackTrace(); } } } }
我是天王盖地虎的分割线
这也就是一个IO流的控制,与《Android -- 拷贝assets下的资源文件到SD卡中(可以超过1M)》有着异曲同工之妙。
《Android -- 拷贝assets下的资源文件到SD卡中(可以超过1M)》传送门:http://www.cnblogs.com/yydcdut/p/3744873.html
本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3783176.html,如需转载请自行联系原作者