如何使用我自己的数据库 - android

时间:2013-01-26 21:46:28

标签: android sqlite

  

可能重复:
  How to use an existing database with an Android application

我有一个sqlite数据库文件,我想在我的应用程序中使用它。

我该怎么做?

如何将我的db文件推送到模拟器,然后在我的代码中使用它?

欢迎任何解决方案。 先生,汤姆。

2 个答案:

答案 0 :(得分:3)

public class AssetDatabaseHelper extends SQLiteOpenHelper {

    private String dbName;
    private String db_path;
    private Context context;

    /**
     * A helper class to import db files.
     * 
     * @param base
     *            /app context
     * @param dbName
     *            The name of the db in asset folder .
     */
    public AssetDatabaseHelper(Context context, String dbName) {
        super(context, dbName, null, 1);
        this.dbName = dbName;
        this.context = context;
        db_path = "/data/data/" + context.getPackageName() + "/databases/";
    }

    /**
     * Check if the database already exist to avoid re-copying the file each
     * time you open the application.
     * 
     * @return true if it exists, false if it doesn't
     */
    public boolean checkExist() {

        SQLiteDatabase checkDB = null;

        try {
            String myPath = db_path + dbName;
            checkDB = SQLiteDatabase.openDatabase(myPath, null,
                    SQLiteDatabase.OPEN_READONLY);

        } catch (SQLiteException e) {
            e.printStackTrace();
            // database does't exist yet.

        } catch (Exception ep) {
            ep.printStackTrace();
        }

        if (checkDB != null) {

            checkDB.close();

        }

        return checkDB != null ? true : false;
    }

    /**
     * Creates a empty database on the system and rewrites it with your own
     * database.
     * */
    public void importIfNotExist() throws IOException {

        boolean dbExist = checkExist();

        if (dbExist) {
            // do nothing - database already exist
        } else {

            // By calling this method and empty database will be created into
            // the default system path
            // of your application so we are gonna be able to overwrite that
            // database with our database.
            this.getReadableDatabase();

            try {

                copyDatabase();

            } catch (IOException e) {

                throw new Error("Error copying database");

            }
        }

    }

    private void copyDatabase() throws IOException {
        InputStream is = context.getAssets().open(dbName);

        OutputStream os = new FileOutputStream(db_path + dbName);

        byte[] buffer = new byte[4096];
        int length;
        while ((length = is.read(buffer)) > 0) {
            os.write(buffer, 0, length);
        }
        os.flush();
        os.close();
        is.close();
        this.close();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

}

基于此tutorial。您将sqlite数据库文件放在资产文件夹中,它将在您运行代码时复制。我的版本允许多重数据库文件,因为它选择路径。 要使用它:

AssetDatabaseHelper dbHelper = new AssetDatabaseHelper(
                getBaseContext(), SomeDataBase.SOME_DATABASE_NAME);
        try {
            dbHelper.importIfNotExist();
        } catch (IOException e) {
            e.printStackTrace();
        }

答案 1 :(得分:1)

您需要扩展SQLiteOpenHelper以匹配您的数据库表。这将允许您的应用与数据库进行交互。检查一下:http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html

要使用数据库,请在模拟器运行时使用Eclipse中的Android->文件资源管理器视图将其推送到/data/data/your.package/databases/