复制SQLite数据库从资产的文件夹

编程入门 行业动态 更新时间:2024-10-19 13:34:18
本文介绍了复制SQLite数据库从资产的文件夹的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想复制的资产文件夹SQLite数据库。这是我DatabaseAdapter.java类

I wanna copy SQLite database from assets folder. This my DatabaseAdapter.java class

package com.example.dictionary; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseAdapter extends SQLiteOpenHelper { static String DB_PATH = "/data/data/com.example.dictionary/databases/"; static String DB_NAME = "dict.db"; SQLiteDatabase db; private final Context mContext; public DatabaseAdapter(Context context) { super(context, DB_NAME, null, 1); this.mContext = context; } public void createDB(){ boolean dbExist = checkDB(); if (dbExist) { } else { this.getReadableDatabase(); try { copyDB(); } catch (Exception e) { throw new Error("Error copying DB"); } } } private void copyDB() throws IOException { InputStream dbInput = mContext.getAssets().open(DB_NAME); String outFile = DB_PATH + DB_NAME; OutputStream dbOutput = new FileOutputStream(outFile); byte[] buffer = new byte[1024]; int length; while ((length = dbInput.read(buffer))>0) { dbOutput.write(buffer,0,length); } dbOutput.flush(); dbOutput.close(); dbInput.close(); } private boolean checkDB() { SQLiteDatabase check = null; try { String dbPath = DB_PATH+DB_NAME; check = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READONLY); } catch (Exception e) { // TODO: handle exception } if (check!=null) { check.close(); } return check != null ? true : false; } public void openDB(){ String dbPath = DB_PATH+DB_NAME; db = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READONLY); } public synchronized void close(){ if(db != null) db.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }

当我运行应用程序,它不是错误。但是当我检查数据库文件夹中,我看到文件dict.db,但只有12.00K并且只有android_metadata表。请帮我。谢谢。

When i run app it isn't error. but when i check databases folder i saw file "dict.db" but only 12.00K and has only android_metadata table. Please help me. thanks.

推荐答案

把所有这些方法在乌拉圭回合的辅助类。

put all this method in ur helper class.

public DataBaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub mContext = context; } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } /** * This method will create database in application package /databases * directory when first time application launched **/ public void createDataBase() throws IOException { boolean mDataBaseExist = checkDataBase(); if (!mDataBaseExist) { this.getReadableDatabase(); try { copyDataBase(); } catch (IOException mIOException) { mIOException.printStackTrace(); throw new Error("Error copying database"); } finally { this.close(); } } } /** This method checks whether database is exists or not **/ private boolean checkDataBase() { try { final String mPath = DATABASE_PATH + DATABASE_NAME; final File file = new File(mPath); if (file.exists()) return true; else return false; } catch (SQLiteException e) { e.printStackTrace(); return false; } } /** * This method will copy database from /assets directory to application * package /databases directory **/ private void copyDataBase() throws IOException { try { InputStream mInputStream = mContext.getAssets().open(DATABASE_NAME); String outFileName = DATABASE_PATH + DATABASE_NAME; OutputStream mOutputStream = new FileOutputStream(outFileName); byte[] buffer = new byte[1024]; int length; while ((length = mInputStream.read(buffer)) > 0) { mOutputStream.write(buffer, 0, length); } mOutputStream.flush(); mOutputStream.close(); mInputStream.close(); } catch (Exception e) { e.printStackTrace(); } } /** This method open database for operations **/ public boolean openDataBase() throws SQLException { String mPath = DATABASE_PATH + DATABASE_NAME; myDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.OPEN_READWRITE); return myDataBase.isOpen(); } /** This method close database connection and released occupied memory **/ @Override public synchronized void close() { if (myDataBase != null) myDataBase.close(); SQLiteDatabase.releaseMemory(); super.close(); }

更多推荐

复制SQLite数据库从资产的文件夹

本文发布于:2023-10-26 23:50:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1531705.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文件夹   资产   数据库   SQLite

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!