如何使用ORMLite将预先存在的数据库读入Android

时间:2013-07-02 04:56:54

标签: android database ormlite

我想在android中使用ORMLite预先存在的数据库文件。我有已创建数据库的database.db文件。我想在我的应用程序中使用它。

我的课程扩展了OrmLiteSqliteOpenHelper。

任何人都有想法吗?请帮忙

我使用
将数据库文件复制到数据路径中 public static void copyDataBase(String path,Context c)抛出IOException {

    //Open your local db as the input stream
    InputStream myInput = c.getAssets().open("Mydb.db");

    // Path to the just created empty db
    String outFileName = "/data/data/packageName/databases/databaseName";
    String outFileName2 = "/data/data/packageName/databases/";
    File file = new File(outFileName2);
    if(!file.exists())
        file.mkdirs();
    //Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    //transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer))>0){
        myOutput.write(buffer, 0, length);
    }

    //Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close(); 
}

但它不会帮助我。

2 个答案:

答案 0 :(得分:0)

由于我不知道你的确切问题是什么,所以在黑暗中这是一种刺痛,但你不能只在OrmLiteSqliteOpenHelper构造函数中指定数据库文件(和路径)吗?

OrmLiteSqliteOpenHelper(android.content.Context context, String databaseName, android.database.sqlite.SQLiteDatabase.CursorFactory factory, int databaseVersion)

此论坛上还有许多问题涉及打开自定义数据库文件。 This问题不是特定于ORMLite的,但是它们可能会让您前进,因为它打开了自定义数据库文件。

希望这能帮助你一路走来。

答案 1 :(得分:0)

我已通过以下实施解决了这个问题

try {

            String destPath = "/data/data/" + context.getPackageName()
                    + "/databases";
            Log.v("LOG", destPath);

            File f = new File(destPath);
            if (!f.exists()) {
                f.mkdirs();
                File outputFile = new File("/data/data/"
                        + context.getPackageName() + "/databases",
                        "Name ofyour Database");
                outputFile.createNewFile();

                String DatabaseFile = "database file name from asset folder";

                InputStream in = context.getAssets().open(DatabaseFile);
                OutputStream out = new FileOutputStream(outputFile);

                byte[] buffer = new byte[1024];
                int length;
                while ((length = in.read(buffer)) > 0) {
                    out.write(buffer, 0, length);
                }
                in.close();
                out.close();
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            Log.v("TAG", "ioexeption");
            e.printStackTrace();
        }