这里有2个思路
1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时,用现成的sqlite的二进制文件进行直接copy到Android系统的数据库路径
2.可以考虑在第一次启动时,执行数据库初始化的sql文件.
1.在本地准备android能使用的sqlite数据库文件
使用sqlite数据库管理工具,看个人爱好(SQLite Database Browser ,Navicat Premium,)
打开数据库,创建"android_metadata"数据表
- CREATE TABLE "android_metadata" ("_id" INTEGER PRIMARY KEY AUTOINCREMENT,"locale" TEXT DEFAULT ‘en_US‘);//创建表
- INSERT INTO "android_metadata" VALUES (1,‘en_US‘);//插入值
创建其他应用需要的表..此处省略.
2.复制文件到应用中.
把第一步创建的数据库文件复制到应用中的assets文件夹, asserts文件夹的路径如下:
然后创建DateBaseHelper extends SQLiteOpenHelper的类文件.
代码如下:
- public class DataBaseHelper extends SQLiteOpenHelper {
-
- private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";
- private static String DB_NAME = "myDBName";
- private SQLiteDatabase myDataBase;
- private final Context myContext;
-
- public DataBaseHelper(Context context) {
- super(context, DB_NAME, null, 1);
- this.myContext = context;
- }
-
-
- public void createDataBase()throws IOException {
- boolean dbExist = checkDataBase();
- if (dbExist) {
-
- } else {
-
-
- this.getReadableDatabase();
- try {
- copyDataBase();
- } catch (IOException e) {
- throw new Error("Error copying database");
- }
- }
- }
-
-
- private boolean checkDataBase() {
- SQLiteDatabase checkDB = null;
- try {
- String myPath = DB_PATH + DB_NAME;
- checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
- } catch (SQLiteException e) {
-
- }
-
- if (checkDB != null) {
- checkDB.close();
- }
- return checkDB != null ? true : false;
- }
-
-
- private void copyDataBase()throws IOException {
-
- InputStream myInput = myContext.getAssets().open(DB_NAME);
-
- String outFileName = DB_PATH + DB_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 myPath = DB_PATH + DB_NAME;
- myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
- }
-
- @Override
- public synchronized void close() {
- if (myDataBase != null)
- myDataBase.close();
- super.close();
- }
-
- @Override
- public void onCreate(SQLiteDatabase db) {}
-
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
-
-
-
- }
3.现在我们可以创建DateBaseHelper的实现操作了.
createDataBase() //创建
openDataBase()//打开只读数据库
记得要更改"YOUR_PACKAGE"为你的应用的包名
如:com.examplename.myapp
大概代码如下:
- ...
- DataBaseHelper myDbHelper = new DataBaseHelper();
- myDbHelper = new DataBaseHelper(this);
- try {
- myDbHelper.createDataBase();
- } catch (IOException ioe) {
- throw new Error("Unable to create database");
- }
- try {
- myDbHelper.openDataBase();
- } catch (SQLException sqle) {
- throw sqle;
- }
- ...