我怎么能嵌入SQLite数据库到应用程序? [英] How can I embed an SQLite database into an application?

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

问题描述

我觉得我有一些基本的认识问题,所以也许有人的能够帮助: - )

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

我正在开发使用Eclipse和这个应用程序将使用一个数据库的Andr​​oid应用程序(从数据库读取仅将实施)。该数据库包含约4000项,即创建和填充通过源$ C ​​$ c中的数据库不是一个选项。因此,我已经与它的所有记录在数据库中前进。

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.

但我怎么能嵌入该数据库文件到我的应用程序,然后访问它?该DATABSE将围绕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.

谢谢, 罗伯特·

推荐答案

我被解决了这个问题:

  1. 添加 file.db 到项目/资产的文件夹;

  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天全站免登陆