ORMLite框架 的使用方法---给你的数据库操作插上翅膀
生活随笔
收集整理的這篇文章主要介紹了
ORMLite框架 的使用方法---给你的数据库操作插上翅膀
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一:首先下載 ORMLite Jar 包
先去 ORMLite官網(wǎng)下載jar包 寫博客時,目前最新的,對于Android為:ormlite-android-5.0.jar 和 ormlite-core-5.0.jar ;?
然后分包處理,建議如圖所示分包:
二:配置Bean類
@DatabaseTable(tableName?=?"Book")public?class?MyBean?{
@DatabaseField(generatedId?=?true)
private?int?id;
@DatabaseField(columnName?=?"name")
public?String?name;
@DatabaseField(columnName?=?"author")
public?String?author;
@DatabaseField(columnName?=?"price")
public?String?price;
@DatabaseField(columnName?=?"pages")
public?int?pages;
public?String?getAuthor()?{
return?author;
}
public?void?setAuthor(String?author)?{
this.author?=?author;
}
public?String?getPrice()?{
return?price;
}
public?void?setPrice(String?price)?{
this.price?=?price;
}
public?int?getPages()?{
return?pages;
}
public?void?setPages(int?pages)?{
this.pages?=?pages;
}
public?String?getName()?{
return?name;
}
public?void?setName(String?name)?{
this.name?=?name;
}
}
三:編寫Helper類
public?class?MyDatabaseHelper?extends?OrmLiteSqliteOpenHelper?{public?static?final?String?DB_NAME?=?"BookStore.db";
public?static?final?int?DB_VERSION?=?1;
public?MyDatabaseHelper(Context?context)?{
super(context,?DB_NAME,?null,?DB_VERSION);
}
@Override
public?void?onCreate(SQLiteDatabase?sqLiteDatabase,?ConnectionSource?connectionSource)?{
try?{
TableUtils.createTable(connectionSource,?MyBean.class);
}?catch?(SQLException?e)?{
e.printStackTrace();
}
}
@Override
public?void?onUpgrade(SQLiteDatabase?sqLiteDatabase,?ConnectionSource?connectionSource,?int?oldVersion,?int?newVersion)?{
System.out.println("MyDatabaseHelper.onUpgrade?oldVersion="?+?oldVersion?+?"??newVersion="?+?newVersion);
try?{
switch?(oldVersion)?{
case?1:
getDao(MyBean.class).executeRaw("alter?table?Book?add?column?book_type?varchar(20)");
//在數(shù)據(jù)庫版本1的下一版本,Book表中新添加了?book_type?字段
case?2:
//?TableUtils.createTable(connectionSource,?MyBean2.class);
//在數(shù)據(jù)庫版本2的下一版本,新增加了一張表
default:
break;
}
//顯然這樣處理比較暴力
//TableUtils.dropTable(connectionSource,?MyBean.class,?true);
//onCreate(sqLiteDatabase,?connectionSource);
}?catch?(SQLException?e)?{
e.printStackTrace();
}
}
private?static?MyDatabaseHelper?instance;
/**
*?單例獲取該Helper
*
*?@param?context
*?@return
*/
public?static?MyDatabaseHelper?getHelper(Context?context)?{
if?(instance?==?null)?{
synchronized?(MyDatabaseHelper.class)?{
if?(instance?==?null)
instance?=?new?MyDatabaseHelper(context);
}
}
return?instance;
}
private?Map<String,?Dao>?daos?=?new?HashMap<>();
public?synchronized?Dao?getDao(Class?clazz)?throws?SQLException?{
Dao?dao?=?null;
String?className?=?clazz.getSimpleName();
if?(daos.containsKey(className))?{
dao?=?daos.get(clazz);
}
if?(dao?==?null)?{
dao?=?super.getDao(clazz);
daos.put(className,?dao);
}
return?dao;
}
@Override
public?void?close()?{
super.close();
for?(String?key?:?daos.keySet())?{
Dao?dao?=?daos.get(key);
dao?=?null;
}
}
}
四:編寫DAO類
1:接口編寫:
public?interface?MyDataImpl?{void?insert(ArrayList<MyBean>?beanArrayList);
void?insert(MyBean?myBean);
void?update(String?name,?String?price);
void?update2(String?columnName,?String?columnValue);
void?update3(String?queryColumnName,?String?queryColumnValue,?String?setColumnName,?String?setColumnValue);
void?delete(String?name);
int?deleteAll();
ArrayList<String>?queryPrice(String?name);
String?queryAuthor(String?name,?String?price);
long?queryCount();
ArrayList<MyBean>?queryId(int?id);
ArrayList<MyBean>?queryAll();
}
public?class?MyDataDao?implements?MyDataImpl?{
private?MyDatabaseHelper?mHelper;
private?Dao<MyBean,?Integer>?dao;
private?Context?mContext;
private?static?MyDataDao?instance;
protected?MyDataDao(Context?context)?{
this.mContext?=?context;
try?{
mHelper?=?MyDatabaseHelper.getHelper(mContext);
dao?=?mHelper.getDao(MyBean.class);
}?catch?(SQLException?e)?{
e.printStackTrace();
}
}
public?static?MyDataDao?getInstance(Context?context)?{
if?(instance?==?null)?{
synchronized?(MyDataDao.class)?{
if?(instance?==?null)?{
instance?=?new?MyDataDao(context);
}
}
}
return?instance;
}
@Override
public?void?insert(MyBean?myBean)?{
try?{
//事務操作
/*?TransactionManager.callInTransaction(mHelper.getConnectionSource(),?new?Callable<Void>()?{
@Override
public?Void?call()?throws?Exception?{
return?null;
}
});*/
dao.create(myBean);
//dao.createOrUpdate(myBean);//和上一行的方法效果一樣
}?catch?(SQLException?e)?{
e.printStackTrace();
}
}
@Override
public?void?insert(ArrayList<MyBean>?beanArrayList)?{
try?{
dao.create(beanArrayList);
}?catch?(SQLException?e)?{
e.printStackTrace();
}
}
@Override
public?void?update(String?name,?String?price)?{
ArrayList<MyBean>?list?=?null;
try?{
list?=?(ArrayList<MyBean>)?dao.queryForEq("name",?name);
if?(list?!=?null)?{
for?(MyBean?bean?:?list)?{
bean.setPrice(price);
dao.update(bean);
//dao.createOrUpdate(bean);//和上一行的方法效果一樣
}
}
}?catch?(SQLException?e)?{
e.printStackTrace();
}
}
@Override
public?void?update2(String?columnName,?String?columnValue)?{
try?{
//下面這兩個代碼的意思一樣
dao.updateBuilder().updateColumnValue(columnName,?columnValue).update();
//dao.updateRaw("update?Book?set?"?+?columnName?+?"=?",?new?String[]{columnValue});
}?catch?(SQLException?e)?{
e.printStackTrace();
}
}
@Override
public?void?update3(String?queryColumnName,?String?queryColumnValue,?String?setColumnName,?String?setColumnValue)?{
try?{
String?sql?=?"update?Book?set?"?+?setColumnName?+?"=?'"?+?setColumnValue?+?"'?where?"?+?queryColumnName?+?"=?'"?+?queryColumnValue?+?"'";
System.out.println("MyDataDao.update3?sql="?+?sql);
dao.updateRaw(sql);
//dao.updateRaw("update?Book?set?price=?'33333元'?where?name=?'西游記'");//等價于上面的寫法
}?catch?(SQLException?e)?{
e.printStackTrace();
}
}
@Override
public?void?delete(String?name)?{
ArrayList<MyBean>?list?=?null;
try?{
list?=?(ArrayList<MyBean>)?dao.queryForEq("name",?name);
if?(list?!=?null)?{
for?(MyBean?bean?:?list)?{
dao.delete(bean);
}
}
}?catch?(SQLException?e)?{
e.printStackTrace();
}
}
/**
*?@return?-1:刪除數(shù)據(jù)異常??0:無數(shù)據(jù)
*/
@Override
public?int?deleteAll()?{
int?number?=?-1;
try?{
number?=?dao.deleteBuilder().delete();//返回刪除的數(shù)據(jù)條數(shù)??例如:刪除1條數(shù)據(jù),返回1,依次類推。
//dao.deleteBuilder().where().eq("name",?"記").reset();//????
}?catch?(SQLException?e)?{
e.printStackTrace();
}
return?number;
}
@Override
public?ArrayList<String>?queryPrice(String?name)?{
List<MyBean>?list?=?null;
ArrayList<String>?strings?=?null;
try?{
list?=?dao.queryForEq("name",?name);
if?(list?!=?null)?{
strings?=?new?ArrayList<>();
for?(MyBean?myBean?:?list)?{
strings.add(myBean.getPrice());
}
/*for?(int?i?=?0;?i?<?list.size();?i++)?{
strings.add(list.get(i).getPrice());
}*/
}
}?catch?(SQLException?e)?{
e.printStackTrace();
}
return?strings;
}
@Override
public?String?queryAuthor(String?name1,?String?price1)?{
List<MyBean>?list?=?null;
String?author?=?"";
try?{
list?=?dao.queryBuilder().where().eq("name",?name1).and().eq("price",?price1).query();//上述相當與:select?*?from?Book?where?name?=?name1?and?price?=?price1?;
if?(list?!=?null)?{
for?(MyBean?myBean?:?list)?{
author?=?myBean.getAuthor();
}
}
}?catch?(SQLException?e)?{
e.printStackTrace();
}
return?author;//說明:如果這個?author?是唯一的,可以這樣的返回。如果是多個的話,要返回一個ArrayList<String>?類型
}
/**
*?@return?表中數(shù)據(jù)的個數(shù)
*/
@Override
public?long?queryCount()?{
long?number?=?0;
try?{
number?=?dao.queryBuilder().countOf();
}?catch?(SQLException?e)?{
e.printStackTrace();
}
return?number;
}
/**
*?@param?id?這個id?就是表中,每次插入數(shù)據(jù),自己遞增的id?字段
*/
@Override
public?ArrayList<MyBean>?queryId(int?id)?{
ArrayList<MyBean>?list?=?null;
try?{
MyBean?myBean?=?dao.queryForId(id);
if?(myBean?!=?null)?{
list?=?new?ArrayList<>();
list.add(myBean);
}
return?list;
}?catch?(SQLException?e)?{
e.printStackTrace();
}
return?list;
}
@Override
public?ArrayList<MyBean>?queryAll()?{
ArrayList<MyBean>?list?=?null;
try?{
list?=?(ArrayList<MyBean>)?dao.queryForAll();
if?(list?!=?null)?{
return?list;
}
}?catch?(SQLException?e)?{
e.printStackTrace();
}
return?list;
}
public?boolean?delteTables(Context?context,?String?DBname)?{
//?????
return?false;
}
/**
*?這個方法可以的
*/
public?boolean?delteDatabases(Context?context,?String?DBname)?{
return?context.deleteDatabase(DBname);
}
}
五:測試
源碼下載地址
參考文章:
?●?Android快速開發(fā)–使用ORMLite操作數(shù)據(jù)庫
?● ?鴻洋的博客:
?● ?Android ORMLite 框架的入門用法
?● ?Android 快速開發(fā)系列 ORMLite 框架最佳實踐
?● ?SQL 語法
?● ?SQL UPDATE 語句
?● ?OrmLite 官網(wǎng)
原文發(fā)布時間為:2018-10-5 本文來自云棲社區(qū)合作伙伴“Android開發(fā)中文站”,了解相關信息可以關注“Android開發(fā)中文站”。總結
以上是生活随笔為你收集整理的ORMLite框架 的使用方法---给你的数据库操作插上翅膀的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Node.js 基金会和 JS 基金会准
- 下一篇: 连接阿里云和容器技术生态 - 阿里云开源