Android 数据库框架GreenDao实战使用
1.添加记录(SQLite 增)

2.删除记录(SQLite 删)

3.修改记录(SQLite 改)

4.查询记录(SQLite 查)

<1> DAO查询




<2>QueryBuilder查询






<4>Query重复查询



<5>常用的查询方法含义

<6>调试技巧

.5.java后台代码
新建2个java类(HMROpenHelper、MyGreenDaoApplication)

(1)HMROpenHelper代码
package com.example.lucky.mygreendaotest; import android.content.Context;
import android.database.sqlite.SQLiteDatabase; import com.example.lucky.mygreendaotest.gen.DaoMaster; //数据库创建工具类
public class HMROpenHelper extends DaoMaster.OpenHelper {
//构造函数,参数2 name为数据库名称
public HMROpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
super(context, name, factory);
}
}
(2)MyGreenDaoApplication
package com.example.lucky.mygreendaotest; import android.app.Application;
import android.database.sqlite.SQLiteDatabase; import com.example.lucky.mygreendaotest.gen.DaoMaster;
import com.example.lucky.mygreendaotest.gen.DaoSession; /*注意:MyGreenDaoApplication类继承Application,需要在AndroidManifest.xml文件中进行相关设置
android:name=".MyGreenDaoApplication"
MyGreenDaoApplication类的作用是封装数据库对象*/ public class MyGreenDaoApplication extends Application {
private SQLiteDatabase db; //SQLiteDatabase数据库对象
private DaoMaster daoMaster; //daoMaster对象
private DaoSession daoSession; //daoSession对象
public static MyGreenDaoApplication instances; //声明本类的实例对象 @Override
public void onCreate() {
super.onCreate();
instances=this; //给实例对象赋值
setDatabase();
} private void setDatabase() {
//创建数据库
HMROpenHelper hmrOpenHelper=new HMROpenHelper(this,"mydb1",null);
db=hmrOpenHelper.getWritableDatabase(); //获取数据库对象
daoMaster=new DaoMaster(db); //获取DaoMaster对象
daoSession=daoMaster.newSession(); } //获取instances 对象
public static MyGreenDaoApplication getInstances(){
return instances;
} //获取daoSession对象
public DaoSession getDaoSession(){
return daoSession;
} public SQLiteDatabase getDb(){
return db;
}
}
(2)MainActivity代码
package com.example.lucky.mygreendaotest; import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView; import com.example.lucky.mygreendaotest.gen.UserDao; import org.greenrobot.greendao.query.Query;
import org.greenrobot.greendao.query.QueryBuilder; import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity {
private TextView tv_result;
private UserDao userDao;
private List<User> userList; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_result=findViewById(R.id.tv_result);
userList=new ArrayList<>();
QueryBuilder.LOG_SQL=true; //显示SQL语句(可在控制台的Run窗口中看到SQL语句)
QueryBuilder.LOG_VALUES=true; //显示SQL语句的值
userDao=MyGreenDaoApplication.getInstances().getDaoSession().getUserDao();
userDao.deleteAll(); //清空表中的所有数据
// insertOneRecord(); //插入一条数据
// queryOneByName(); //根据姓名查询记录
insertManyRecord(); //插入多条记录
// deleteByName(); //根据姓名删除记录
// userDao.deleteByKey((long)12); //通过主键值删除记录
// updateUser(); //修改数据表的数据
// queryList(); //查询多条记录
// loadOneById();
// queryMany();
queryRepeat(); //在控制台输出语句
// System.out.println("like"); //方式1
// Log.d("002","linda");//方式2
try {
InputStream input=getResources().openRawResource(R.raw.user);//xiaohuat是我的文件名,这里应该根据具体文件更改
Reader reader=new InputStreamReader(input);
BufferedReader br=new BufferedReader(reader);
String str;
while ((str=br.readLine())!=null){
System.out.println(str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} //插入一条数据记录
private void insertOneRecord(){
User user=new User(); //实例化实体类对象
user.setName("lucky");
user.setUsercode("007");
user.setUserAddress("天台县");
userDao.insert(user);
} //插入多条数据记录
private void insertManyRecord(){
List<User> userList=new ArrayList<>();
User user1=new User();
user1.setName("linda");
user1.setUsercode("001");
user1.setUserAddress("杭州"); User user2=new User();
user2.setName("jack");
user2.setUsercode("002");
user2.setUserAddress("苏州"); User user3=new User();
user3.setName("lily");
user3.setUsercode("003");
user3.setUserAddress("南京"); User user4=new User();
user4.setName("pink");
user4.setUsercode("004");
user4.setUserAddress("湖州");
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
userDao.insertInTx(userList);
} //单条数据查询
private void queryOneByName(){
User user=userDao.queryBuilder().where(UserDao.Properties.Name.eq("lucky")).build().unique();
if(user!=null){
tv_result.setText("添加一条记录的结果为:"+"\n\n"+"id:"+user.getId()
+"\n"+"姓名:"+user.getName()
+"\n"+"地址"+user.getUserAddress()
+"\n"+"用户编号:"+user.getUsercode());
}
} private void queryList(){
String resultStr="显示结果为:"+"\n\n";
List<User> userList=userDao.loadAll();
int i=0;
for (User user : userList) {
i=i+1;
resultStr=resultStr+"第"+i+"条记录的结果:"+"id:"+user.getId()+
"\n"+"姓名:"+user.getName()+"\n"+"地址:"+user.getUserAddress()+"\n\n"; }
tv_result.setText(resultStr);
} //根据姓名删除记录
private void deleteByName(){
QueryBuilder queryBuilder=userDao.queryBuilder();
List<User> userList=queryBuilder.where(UserDao.Properties.Name.eq("linda")).list();
for (User user : userList) {
userDao.delete(user);
}
} private void updateUser(){
//注意:一个实体类对象,相当于数据表中的一条记录
User user=userDao.queryBuilder().where(UserDao.Properties.Name.eq("linda")).build().unique(); //查询数据表中姓名为linda的一条记录
user.setUserAddress("上海");
userDao.update(user); //更新数据表中的数据
} //查询一条记录
private void loadOneById(){
User user= null;
try {
user = userDao.load((long) 15);
} catch (Exception e) {
e.printStackTrace();
}
tv_result.setText("Load一条记录的结果:\n"+"id:"+user.getId()+"\n姓名:"+user.getName()+
"\n地址:"+user.getUserAddress());
} //查询多条语句
private void queryMany(){
QueryBuilder queryBuilder=userDao.queryBuilder();
// 挑选名字中带有"in"的数据,并按降序排列
// List<User> userList=queryBuilder.where(UserDao.Properties.Name.like("%in%"))
// .orderDesc(UserDao.Properties.Id).list();
List<User> userList=queryBuilder.where(UserDao.Properties.Name.like("%in%"),
UserDao.Properties.UserAddress.eq("杭州")).list();
queryResultShow(userList);
} private void queryResultShow(List<User> userList) {
if(userList!=null){
String resultStr="查询结果为:"+"\n\n";
int i=0;
for (User user : userList) {
i=i+1;
resultStr=resultStr+"第"+i+"条记录为:\n"+"id:"+user.getId()+"\n姓名:"+user.getName()+
"\n地址:"+user.getUserAddress()+"\n\n";
tv_result.setText(resultStr);
}
}
} private void queryRepeat(){
Query query=userDao.queryBuilder().where(UserDao.Properties.Name.like("%in%"),
UserDao.Properties.UserAddress.like("湖%")).build();
query.setParameter(0,"%il%");
query.setParameter(1,"%京");
List<User> userList=query.list();
queryResultShow(userList);
}
}
Android 数据库框架GreenDao实战使用的更多相关文章
- Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite
Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射 ...
- Android 数据库框架GreenDao使用
1.GreenDao3介绍 (1)基本概念 (2)GreenDao3工作原理 (3)GreenDao优点 (4)GreenDao3版本的改进 2.GreenDao3的相关配置概念介绍 (1)配置项目( ...
- Android 数据库框架总结(转)
转自 http://blog.csdn.net/da_caoyuan/article/details/61414626 一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完 ...
- Android 数据库框架总结,总有一个适合你!
一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面.缺点:1.基于反射,效率较低(本人还没有觉得效率低):2.缺少中文翻译文档 jar包 地址:http: ...
- Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包
Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...
- ORM数据库框架 greenDAO SQLite MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Android 数据库框架OrmLite的使用(一)
在这里记录下最基本的用法,官网上可了解相关的介绍. 1.下载OrmLite jar 在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar ...
- Android 数据库框架ormlite
Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...
- Android数据库框架-----ORMLite关联表的使用
上一篇已经对ORMLite框架做了简单的介绍:Android数据库框架-----ORMLite 的基本用法~~本篇将介绍项目可能会使用到的一些用法,也为我们的使用ORMLite框架总结出一个较合理的用 ...
随机推荐
- Express+MySQL
初识NodeJS服务端开发(Express+MySQL) http://www.tuicool.com/articles/JfqYN3I 浅析node连接数据库(express+mysql) http ...
- rsa 数学推论
RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化 而生动的描述,使得高深的数学理论能够被容易地理解.我们 ...
- 无返回值的函数如何捕获出错情况(检查errno常量)
在执行这个函数前,先清除errno,函数返回时,检查errno常量. 每次程序调用失败的时候,系统会自动用用错误代码填充errno这个全局变量,这样你只需要读errno这个全局变量就可以获得失败原因了 ...
- 初学reactNative遇到的问题总结
1.undefined is not an object (evaluating '_react3.default.PropTypes.shape') Navigator已经不再react nativ ...
- 小议C#接口的隐式与显示实现
小弟不才,各位大牛嘴下留情... 一.对于继承类里头有相同方法时候,用接口方式去调用,会优先查走显式接口方法 例如 public interface IA { void Test(); } publi ...
- MVC页面加载会多次请求后台问题
最近调试代码的时候发现有些控制器有代码走两遍的情况,后台发现是前端url或者herf标签导致请求了mvc路由,具体案例如下: 这两种路径为空的时候都会导致请求mvc路由重复请求后台方法
- 函数形参为基类数组,实参为继承类数组,下存在的问题------c++程序设计原理与实践(进阶篇)
示例: #include<iostream> using namespace std; class A { public: int a; int b; A(int aa=1, int bb ...
- 解决低版本Xcode不支持高版本iOS真机调试的问题
1.现象截图 Could not locate device support files. This iPhone 6s is running iOS 11.1 (15B93), which may ...
- NSRange 范围
前言 结构体,这个结构体用来表示事物的一个范围,通常是字符串里的字符范围或者集合里的元素范围. typedef struct _NSRange { NSUInteger location; // 表示 ...
- F题(水题)
给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,最大的数是多少. 例如: 1 7 6 3 1.i = 1, j = 3,对应的数为7 6 3,最大的数为7. ...