Android资源文件夹中的外部数据库

我有一个android应用程序,应该读取和展开已经在sqlite上创build的数据库…它通过将数据库放在模拟器的文件资源pipe理器中的“data / data /(packagename)/ database”文件夹上, 。 现在的问题是真正的设备发生。 显然,它没有数据库打开。我试图把数据库放在资产文件夹,但我没有得到用openhelper打开它。

Solutions Collecting From Web of "Android资源文件夹中的外部数据库"

您应该将资产文件夹中的.db文件复制到内部/外部存储器。 你可以使用下面的代码,

private static String DB_PATH = "/data/data/your package/database/"; private static String DB_NAME ="final.db";// Database name 

要创build一个数据库,

 public void createDataBase() throws IOException { //If database not exists copy it from the assets boolean mDataBaseExist = checkDataBase(); if(!mDataBaseExist) { try { //Copy the database from assests copyDataBase(); Log.e(TAG, "createDatabase database created"); } catch (IOException mIOException) { throw new Error("ErrorCopyingDataBase"); } } } 

检查数据库是否存在:/ data / data / your package / database / DB Name

 private boolean checkDataBase() { File dbFile = new File(DB_PATH + DB_NAME); return dbFile.exists(); } 

从资产中复制数据库

  private void copyDataBase() throws IOException { InputStream mInput = getApplicationContext().getAssets().open(DB_NAME); String outFileName = DB_PATH + DB_NAME; OutputStream mOutput = new FileOutputStream(outFileName); byte[] mBuffer = new byte[1024]; int mLength; while ((mLength = mInput.read(mBuffer))>0) { mOutput.write(mBuffer, 0, mLength); } mOutput.flush(); mOutput.close(); mInput.close(); } 

我希望它能帮助你。

你不能从资产文件夹直接访问数据库,你需要首先将其复制到pathdata / data /(packagename)/ database,然后使用它:

  private String DB_PATH = "/data/data/" + "yourpackaename" + "/databases/" + "db.db"; 

在你的onCreate()

  is = getAssets().open("db.db"); write(is); 

然后调用方法:

 public void write(InputStream is) { try { OutputStream out = new FileOutputStream(new File(DB_PATH)); int read = 0; byte[] bytes = new byte[1024]; while ((read = is.read(bytes)) != -1) { out.write(bytes, 0, read); } is.close(); out.flush(); out.close(); System.err.println(out + "\n"); } catch (IOException e) { e.printStackTrace(); } } 

您不能直接从资产文件夹打开文件。 相反,您需要将资产文件夹的内容复制到内部/外部存储上 ,然后使用Filepath打开文件。 在模拟器中,更容易访问应用程序的数据文件夹。 但是,在一个真正的无根据的Android设备,由于安全原因,这是不可能的。

您需要首先使用java代码将数据库文件从集合中复制到应用程序数据位置。可以发布一些代码以显示如何打开或处理数据库?

你有一个预填充的数据库,并希望融入到你的应用程序? 如果是的话,你可以简单地使用我的图书馆

在您的应用程序安装后首次启动

 SuperDatabase database=new SuperDatabase(getApplicationContext(),"foods.db", AssetDatabaseMode.COPY_TO_SYSTEM); 

随后发射

 SuperDatabase database=new SuperDatabase(getApplicationContext(),"foods.db", AssetDatabaseMode.READ_FROM_DEVICE); 

只需激发SQL查询

 database.sqlInject("INSERT INTO food VALUES('Banana','Vitamin A');"); 

以CSV,JSON,XML格式获取数组结果

 ArrayList<String> rows=new ArrayList<String>(); rows=database.sqlEjectCSV("SELECT * FROM food;"); for (int i=0;i<rows.size();i++) { //Do stuffs with each row } 

你需要为此包括我的图书馆。 文档在这里:
https://github.com/sangeethnandakumar/TestTube