android 数据库之greendao
2016-01-01 22:40
429 查看
freemarker-2.3.20.jar和greendao-generator-1.3.1.jar包是数据库代码自动生成需要的jar包,greendao-1.3.7是项目需要的jar包
数据库代码如下:
1)、自动生成数据库相关代码
[/code]
2)、初始化数据库
[/code]
3)、获取服务端数据后,需要把数据插入本地数据库,注意因为是耗时操作,需要在子线程操作
[/code]
4)、需要在自动生成的后缀带DAO的类中增加批量增加的方法
[/code]
数据库升级问题
如果升级,值需要修改DaoMaster类里面的SCHEMA_VERSION变量
需要注意的是,如果升级过程中数据库名称与原来的不一样,那么不会走update()方法
[/code]
设计数据删除相关操作
[/code]
数据库代码如下:
1)、自动生成数据库相关代码
public static void main(String[] args) throws IOException, Exception {
// 自动生成的代码在HomeFragment存放的路径
Schema schema = new Schema(1, "com.xiaoma.dao");
Entity addressTable = schema.addEntity("address");
addressTable.addStringProperty("uuid");
addressTable.addStringProperty("sequence");
addressTable.addStringProperty("level");
addressTable.addStringProperty("parentid");
addressTable.addStringProperty("name");
addressTable.addStringProperty("initial");
Entity landtypeTable = schema.addEntity("landtype");
landtypeTable.addStringProperty("uuid");
landtypeTable.addStringProperty("sequence");
landtypeTable.addStringProperty("level");
landtypeTable.addStringProperty("name");
landtypeTable.addStringProperty("parentid");
new DaoGenerator().generateAll(schema, "../HomeFragment/src");
}
[/code]
2)、初始化数据库
private void initDataDao() {
db = new DaoMaster.DevOpenHelper(BaseApp.getApplication(),
"initdata.db", null).getWritableDatabase();
DaoMaster master = new DaoMaster(db);
DaoSession session = master.newSession();
landTypeDao = session.getLandtypeDao();
addressDao = session.getAddressDao();
Boolean landTypeTig = PrefereUtils.getInstance().getInitDataTig();
if (landTypeTig == false) {
//初始化数据库数据,从服务器端获取基础数据
initData();
}
}
[/code]
3)、获取服务端数据后,需要把数据插入本地数据库,注意因为是耗时操作,需要在子线程操作
new Thread(new Runnable() {
@Override
public void run() {
landTypeDao.insertAll(db, list);
addressDao.insertAll(db, list1, version);
PrefereUtils.getInstance().savaInitDataVersion(version);
PrefereUtils.getInstance().SaveInitDataTig(true);
db.close();
}
}).start();
[/code]
4)、需要在自动生成的后缀带DAO的类中增加批量增加的方法
//批量增加
public void insertAll(SQLiteDatabase db, List<landtype> dataList) {
String sql = "insert into LANDTYPE(UUID,SEQUENCE,LEVEL,NAME,PARENTID) values(?,?,?,?,?)";
SQLiteStatement statment = db.compileStatement(sql);
db.beginTransaction();
for (landtype category : dataList) {
statment.bindString(1, category.getUuid());
statment.bindString(2, category.getSequence());
statment.bindString(3, category.getLevel());
statment.bindString(4, category.getName());
statment.bindString(5, category.getParentid() == null ? ""
: category.getParentid());
statment.executeInsert();
}
db.setTransactionSuccessful();
db.endTransaction();
statment.close();
}
[/code]
数据库升级问题
如果升级,值需要修改DaoMaster类里面的SCHEMA_VERSION变量
需要注意的是,如果升级过程中数据库名称与原来的不一样,那么不会走update()方法
THDevOpenHelper helper = new THDevOpenHelper(MainActivity.this, "xiaoma.db", null);
Log.e("xiaoma=","main");
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
addressDao addressDao = daoSession.getAddressDao();
landtypeDao landtypeDao = daoSession.getLandtypeDao();
address address = new address("444", "444", "444", "4444", "4444", "4444");
landtype landtype = new landtype("55", "555", "555", "555", "55555");
addressDao.insert(address);
landtypeDao.insert(landtype);
// Log.e("xiaoma=", "delete");
// deleteDatabase("xiaoma.db");
}
public class THDevOpenHelper extends DaoMaster.OpenHelper {
public THDevOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
Log.e("xiaoma=","create");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.e("xiaoma=","updata");
//只有数据库名称一直相同时才走该段代码
switch (oldVersion){
case 1:
case 2:
case 3:
Log.e("=======",oldVersion+"=====new version"+newVersion);
deleteDatabase("ima.db");
break;
}
}
}
[/code]
设计数据删除相关操作
/** * 本应用数据清除管理器 */
public class DataCleanManager {
/** * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * @param context */
public static void cleanInternalCache(Context context) {
deleteFilesByDirectory(context.getCacheDir());
}
/** * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * @param context */
public static void cleanDatabases(Context context) {
deleteFilesByDirectory(new File("/data/data/"
+ context.getPackageName() + "/databases"));
}
/**
* * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * * @param
* context
*/
public static void cleanSharedPreference(Context context) {
deleteFilesByDirectory(new File("/data/data/"
+ context.getPackageName() + "/shared_prefs"));
}
/** * 按名字清除本应用数据库 * * @param context * @param dbName */
public static void cleanDatabaseByName(Context context, String dbName) {
context.deleteDatabase(dbName);
}
/** * 清除/data/data/com.xxx.xxx/files下的内容 * * @param context */
public static void cleanFiles(Context context) {
deleteFilesByDirectory(context.getFilesDir());
}
/**
* * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache) * * @param
* context
*/
public static void cleanExternalCache(Context context) {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
deleteFilesByDirectory(context.getExternalCacheDir());
}
}
/** * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除 * * @param filePath */
public static void cleanCustomCache(String filePath) {
deleteFilesByDirectory(new File(filePath));
}
/** * 清除本应用所有的数据 * * @param context * @param filepath */
public static void cleanApplicationData(Context context, String... filepath) {
cleanInternalCache(context);
cleanExternalCache(context);
cleanDatabases(context);
cleanSharedPreference(context);
cleanFiles(context);
for (String filePath : filepath) {
cleanCustomCache(filePath);
}
}
/** * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * @param directory */
private static void deleteFilesByDirectory(File directory) {
if (directory != null && directory.exists() && directory.isDirectory()) {
for (File item : directory.listFiles()) {
item.delete();
}
}
}
}
[/code]
相关文章推荐
- Android的AdapterViewFlipper
- Android的Spinner
- 学习Android从0开始之基础篇(1)-Android的四大基本组件
- Android开发之 Android 的基本组件的概述
- Android的AnalogClock和DigitalClock
- Android中View类OnClickListener和DialogInterface类OnClickListener导入包冲突
- Android的TextureView
- 解决AndroidStudio导入工程报错:“Your project path contains non-ASCII characters.”
- Android的ToggleButton
- android属性大全
- Android的CheckBox复选框
- Android的sdk下载问题
- Android中常用单位(dpi、px、dp、sp)
- Android中ImageView.ScaleType属性值
- Android的ImageView图片
- android使用include调用内部组件报空指针异常解决方案
- Android开发 更改返回button的图标
- Android开发-百度地图(一)——准备
- android-自定义-悬浮控件
- Android 图片的内存优化