为了方便项目初期调试,需要运行后台给的数据。后台给了一个.db格式的文件,实际上就是打开已有的数据库文件。外部数据库指的就是一个在外部单独创建的.db格式的文件,是一个写死的数据。也可以是类似全国各个省各个市的一些基本信息,每个市的信息等等,可以储存在.db格式的文件里面,合不合理暂不先说,只是考虑一下怎么操作,因为我的项目初期就是这样通过操作.db文件来先实现功能的,后期再改为从接口获取,这样可以节省开发时间。
首先把.db格式的数据文件拷贝到工程项目的assets文件夹下,完后就是读取这个.db文件,不啰嗦,直接上代码:
import android.content.Context; import android.database.sqlite.SQLiteDatabase; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; /** * 创造一个临时数据 * Created by KingsleyCheng on 2017/5/17. */ public class SQLdm { String filePath = "data/data/com.*****/databases/test.db"; String pathStr = "data/data/com.*****/databases"; SQLiteDatabase database; public SQLiteDatabase openDatabase(Context context) { System.out.println("filePath:" + filePath); File jhPath = new File(filePath); if (jhPath.exists()) { return SQLiteDatabase.openOrCreateDatabase(jhPath, null); } else { File path = new File(pathStr); if (path.mkdir()) { } else { } try { InputStream is = context.getClass().getClassLoader().getResourceAsStream("assets/" + "yushi2.db"); FileOutputStream fos = new FileOutputStream(jhPath); byte[] buffer = new byte[10240]; int count = 0; while ((count = is.read(buffer)) > 0) { fos.write(buffer, 0, count); } fos.flush(); fos.close(); is.close(); } catch (IOException e) { e.printStackTrace(); return null; } return openDatabase(context); } } }其使用方法与普通数据库一样,同样是在数据库管理单例里面处理,在application里面初始化:
/** * 数据库操作类 * Created by KingsleyCheng on 2017/5/11. */ public class GreenDaoUtils { private MySQLiteOpenHelper mHelper; private SQLiteDatabase db; private DaoMaster mDaoMaster; private DaoSession mDaoSession; private static class GreenDaoUtilsHolder { private static final GreenDaoUtils INSTANCE = new GreenDaoUtils(); } private GreenDaoUtils() { } public static GreenDaoUtils getSingleton() { return GreenDaoUtilsHolder.INSTANCE; } private void initGreenDao() { //临时数据使用 SQLdm s = new SQLdm(); db = s.openDatabase(BaseApplication.getContext()); mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); } public DaoSession getDaoSession() { if (mDaoMaster == null) { initGreenDao(); } return mDaoSession; } public SQLiteDatabase getDb() { if (db == null) { initGreenDao(); } return db; } }