如何将 SQLite 数据库嵌入到应用程序中? [英] How can I embed an SQLite database into an application?

查看:42
本文介绍了如何将 SQLite 数据库嵌入到应用程序中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想我有一些基本的理解问题,所以也许有人可以提供帮助:-)

I think I have some basic understanding problem so maybe someone's able to help :-)

我正在使用 Eclipse 开发一个 Android 应用程序,这个应用程序将使用一个数据库(只实现从数据库读取).该数据库包含大约 4,000 个条目,即无法通过源代码创建和填充数据库.因此,我预先创建了包含所有记录的数据库.

I'm developing an Android application using Eclipse and this application will make use of a database (only reading from the database will be implemented). The database contains around 4,000 entries i.e. creating and populating the database via source code is not an option. Thus I have created the database in advance with all its records.

但是如何将这个数据库文件嵌入"到我的应用程序中然后访问它?数据库的文件大小约为 500 kB.从远程服务器下载也不是一种选择,因为这是不允许的.

But how can I "embed" this database file into my application and then access it? The databse will be around 500 kB in file size. Downloading from a remote server is not an option either as this is not allowed.

谢谢,罗伯特

推荐答案

我通过以下方式解决了这个问题:

I solved that problem by:

  1. file.db 添加到 project/assets 文件夹中;

  1. adding file.db into project/assets folder;

写下一节课:

public class LinnaeusDatabase extends SQLiteOpenHelper{

    private static String DATABASE_NAME = "Dragonfly.db";
    public final static String DATABASE_PATH = "/data/data/com.kan.linnaeus/databases/";
    private static final int DATABASE_VERSION = 1;

    private SQLiteDatabase dataBase;
    private final Context dbContext;

    public LinnaeusDatabase(Context context) {
        super(context, DBActivity.DatabaseName, null, DATABASE_VERSION);
        this.dbContext = context;
        DATABASE_NAME = DBActivity.DatabaseName;
        // checking database and open it if exists
        if (checkDataBase()) {
            openDataBase();
        } else
        {
            try {
                this.getReadableDatabase();
                copyDataBase();
                this.close();
                openDataBase();

            } catch (IOException e) {
                throw new Error("Error copying database");
            }
            Toast.makeText(context, "Initial database is created", Toast.LENGTH_LONG).show();
        }
    }

    private void copyDataBase() throws IOException{
        InputStream myInput = dbContext.getAssets().open(DATABASE_NAME);
        String outFileName = DATABASE_PATH + DATABASE_NAME;
        OutputStream myOutput = new FileOutputStream(outFileName);

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

        myOutput.flush();
        myOutput.close();
        myInput.close();
    }

    public void openDataBase() throws SQLException {
        String dbPath = DATABASE_PATH + DATABASE_NAME;
        dataBase = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
    }

    private boolean checkDataBase() {
        SQLiteDatabase checkDB = null;
        boolean exist = false;
        try {
            String dbPath = DATABASE_PATH + DATABASE_NAME;
            checkDB = SQLiteDatabase.openDatabase(dbPath, null,
            SQLiteDatabase.OPEN_READONLY);
        } catch (SQLiteException e) {
            Log.v("db log", "database does't exist");
        }

        if (checkDB != null) {
            exist = true;
            checkDB.close();
        }
        return exist;
    }
}

这篇关于如何将 SQLite 数据库嵌入到应用程序中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆