在Android应用程序中创建或安装SQLite数据库

时间:2014-10-18 17:07:23

标签: android sqlite mobile

我在Android中使用SQLite数据库看到的所有教程都是自己创建数据库的。这似乎是一个要求。是不是可以使用SQLite工作台创建数据库,并将其安装在Android应用程序文件夹中的正确位置?

2 个答案:

答案 0 :(得分:2)

IT是可能的。

只需创建您的SQLite数据库并将其放在资产文件夹中。

首次启动应用时,只需检查数据库是否存在,如果不存在则创建数据库。

    public String DB_PATH = null;
    public final static String DB_NAME = "mye.db"; //take note this is in your asset folder
    private static final int DB_VERSION = 1;
    private SQLiteDatabase myDatabase;
    private Context myContext = null;

        public DBAdapter(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        this.myContext = context;
        DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
    }

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

        this.getReadableDatabase();

        try {
            copyDatabase();
        } catch (IOException e) {

            throw new Error("Error copying database");

        }
    }

    /**
     * Copy DB from ASSETS
     */

    public void copyDatabase() throws IOException {

        // Open your local db as the input stream
        InputStream myInput = myContext.getAssets().open(DB_NAME);

        // Path to the just created empty db
        String outFileName = DB_PATH + DB_NAME;

        // 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();
    }

    /**
     * Opens Database . Method is synhcronized
     * @throws SQLException
     */
    public synchronized void openDatabase() throws SQLException {
        String dbPath = DB_PATH + DB_NAME;
        myDatabase = SQLiteDatabase.openDatabase(dbPath, null,
                SQLiteDatabase.OPEN_READWRITE);
    }

    /**
     * Closes database. 
     * Method is synchronized for protection
     */
    @Override
    public synchronized void close() {
        if (myDatabase != null) {
            myDatabase.close();
        }
        super.close();
    }


    /**
     * Check if the database exists
     * 
     * @param cntx
     * @return true / false
     */
    public boolean checkDatabase(Context cntx) {
        File dbFile = cntx.getDatabasePath(DB_NAME);
//      Log.e("zeus", "Check db returns : " + dbFile.exists());
        return dbFile.exists();

    }

在扩展应用程序的主要活动或类中,只需获取DBAdapter的实例并检查数据库是否存在。

mDBAdapter = new DBAdapter(getApplicationContext());
if (!mDBAdapter.checkDatabase(getApplicationContext())) {
    try {
        mDBAdapter.createDataBase();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

答案 1 :(得分:0)

  

是不是可以使用SQLite工作台创建数据库,并将其安装在Android应用程序文件夹中的正确位置?

欢迎您这样做,using SQLiteAssetHelper作为打包和部署数据库的方法。

但通常情况下,只有在您要使用应用程序打包的重要数据时才会这样做。