Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用GreenDao ORM库从Android中的资产创建数据库_Android_Orm_Dao_Greendao - Fatal编程技术网

如何使用GreenDao ORM库从Android中的资产创建数据库

如何使用GreenDao ORM库从Android中的资产创建数据库,android,orm,dao,greendao,Android,Orm,Dao,Greendao,我正在使用GreenDaoorm库来创建数据库,它与从代码中创建数据库的第一个示例配合得很好 现在的问题是,我找不到任何文档或与数据库从Assets文件夹复制到内存中的数据库相关的任何内容。接受的答案提供了一个解决方案,但它只是部分正确。看看我贴在下面的课程。这是greenDao的OpenHelper类的扩展。下面是它的使用示例,以及如何使用它而不是OpenHelper或DevPenHelper来管理sqlite数据库的副本 package com.example; import java.i

我正在使用
GreenDao
orm库来创建数据库,它与从代码中创建数据库的第一个示例配合得很好


现在的问题是,我找不到任何文档或与数据库从Assets文件夹复制到内存中的数据库相关的任何内容。

接受的答案提供了一个解决方案,但它只是部分正确。看看我贴在下面的课程。这是greenDao的OpenHelper类的扩展。下面是它的使用示例,以及如何使用它而不是OpenHelper或DevPenHelper来管理sqlite数据库的副本

package com.example;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import com.example.R;
import com.example.DaoMaster.OpenHelper;

public class DatabaseOpenHelper extends OpenHelper {

    private Context context;

    private SQLiteDatabase sqliteDatabase;

    private static String DB_PATH;

    private static String DB_NAME;

    public DatabaseOpenHelper(Context context, String name, CursorFactory factory) {
        super(context, name, factory);
        this.context = context;
        this.DB_NAME = name;
        this.DB_PATH = context.getString(R.string.DB_PATH);
        try {
            createDataBase();
        } catch (Exception ioe) {
            throw new Error("Unable to create database");
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

    /** Open Database for Use */
    public void openDatabase() {
        String databasePath = DB_PATH + DB_NAME;
        sqliteDatabase = SQLiteDatabase.openDatabase(databasePath, null,
                (SQLiteDatabase.OPEN_READWRITE));
    }

    /** Close Database after use */
    @Override
    public synchronized void close() {
        if ((sqliteDatabase != null) && sqliteDatabase.isOpen()) {
            sqliteDatabase.close();
        }
        super.close();
    }

    /** Get database instance for use */
    public SQLiteDatabase getSqliteDatabase() {
        return sqliteDatabase;
    }

    /** Create new database if not present */
    public void createDataBase() {
        SQLiteDatabase sqliteDatabase = null;

        if (databaseExists()) {
            /* Check for Upgrade */
        } else {
            /* Database does not exists create blank database */
            sqliteDatabase = this.getReadableDatabase();
            sqliteDatabase.close();

            copyDataBase();
        }
    }

    /** Check Database if it exists */
    private boolean databaseExists() {
        SQLiteDatabase sqliteDatabase = null;
        try {
            String databasePath = DB_PATH + DB_NAME;
            sqliteDatabase = SQLiteDatabase.openDatabase(databasePath, null,
                    SQLiteDatabase.OPEN_READONLY);
        } catch (SQLiteException e) {
            e.printStackTrace();
        }

        if (sqliteDatabase != null) {
            sqliteDatabase.close();
        }
        return sqliteDatabase != null ? true : false;
    }

    /**
     * Copy existing database file in system
     */
    public void copyDataBase() {

        int length;
        byte[] buffer = new byte[1024];
        String databasePath = DB_PATH + DB_NAME;

        try {
            InputStream databaseInputFile = this.context.getAssets().open(DB_NAME+".sqlite");
            OutputStream databaseOutputFile = new FileOutputStream(databasePath);

            while ((length = databaseInputFile.read(buffer)) > 0) {
                databaseOutputFile.write(buffer, 0, length);
                databaseOutputFile.flush();
            }
            databaseInputFile.close();
            databaseOutputFile.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
下面是它的用法示例:

DatabaseOpenHelper helper = new DatabaseOpenHelper(this, "db", null);
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();

www.rewindesign.com/blog/using-your-own-sqlite-database-in-android-applications/阅读此文我知道从
SqliteOpenHelper
类创建数据库的基本方法,只是我需要使用名为
GreenDao
ORM
工具,以及它如何使用自己的library@SomeoneSomewhere嘿你有没有得到任何使用GreenDAO处理SQLite数据库的例子或方法..请让我们知道..Salam。字符串资源“R.string.DB_PATH”的值是多少?您可以从这段代码中使用它来支持JB4.2多用户:if(android.os.Build.VERSION.SDK_INT>=17){DB_PATH=context.getApplicationInfo().dataDir+“/databases/”;}else{DB_PATH=“/data/data/”+context.getPackageName()+“/databases/”}非常好的解决方案@SayedAbolfazlFatemi这对我很有用:“/data/data/”+context.getPackageName()+“/databases/”如果这样做,是否可以调用诸如loadAll()之类的greendao函数或获取表的实例。。。?