初步掌握ORMLite的使用
来源:互联网 发布:知天命是几岁 编辑:程序博客网 时间:2024/04/28 20:36
我们一般在android开发中都是使用SQLIte进行数据库操作。你要告诉我不会SQL怎么办?没关系,现在教你一个新的方式,使用关系型数据库———ORMLite
ORMlite与数据库之间的映射关系通过注解来说明
先看看配置方面,去ormlite官网下载相关jar
现在最新版本是4.49,我们需要core.jar与android.jar就可以了,然后配置在我们的项目中
这样就配置结束了,我们开始码字了
1
首先配置好对象
@DatabaseTable(tableName = "user")public class User { @DatabaseField(generatedId = true) int id; @DatabaseField(columnName = "name") String name; @DatabaseField(columnName = "age") String age; @DatabaseField(columnName = "sex") String sex; public User() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; }}
从字面上很好理解其中的意思,我们定义了一个User
这张表,里面有4个字段,分别是主键id
, name
,age
,sex
三个字段
2
创建好表对象之后,我们就要创建这个表了。我们一般情况下是继承SQLiteOpenHelper,这边也差不多,只不过多了OrmLite字符串而已——OrmLiteSqliteOpenHelper
public class DB extends OrmLiteSqliteOpenHelper { final static String databaseName="demo.db"; final static int databaseVersion=1; static DB instance=null; private DB(Context context) { super(context, databaseName, null, databaseVersion); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { try { TableUtils.createTableIfNotExists(connectionSource, User.class); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) { } public static synchronized DB getInstance(Context context) { if (instance==null) { synchronized (DB.class) { if (instance==null) { instance=new DB(context); } } } return instance; }}
这样我们就创建好表了,以及提供一个获取helper对象的单例方法
3
接下来我们要往其中添加数据,在单独一个Dao里面
public class UserDao { Dao<User, Integer> dao=null; public UserDao(Context context) { try { dao=DB.getInstance(context).getDao(User.class); } catch (SQLException e) { e.printStackTrace(); } } public void add(User user) { try { dao.create(user); } catch (SQLException e) { e.printStackTrace(); } }}
一句话添加数据,是不是很简单dao.create(user);
4
接下来测试了,我们先添加10条数据
UserDao dao=new UserDao(this);for (int i=0;i<10;i++) { User user=new User(); user.setName("random" + new Random().nextInt(10)); user.setAge("" + new Random().nextInt(30)); user.setSex(""+new Random().nextInt(2)); dao.add(user);}
用REExplorer查看结果
10条数据顺利的添加进来了
5
现在再来测试下查询
public void queryAll() { try { ArrayList<User> users= (ArrayList<User>) dao.queryForAll(); for (int i=0;i<users.size();i++) { User user=users.get(i); System.out.println("name:"+user.getName()+" sex:"+user.getSex()+" age:"+user.getAge()); } } catch (SQLException e) { e.printStackTrace(); }}
看看结果
没问题
6
再来试试更新数据
public void updateOne(ContentValues cv, int age) { UpdateBuilder<User, Integer> updateBuilder=dao.updateBuilder(); try { updateBuilder.where().eq("age", age); Iterator it=cv.keySet().iterator(); while (it.hasNext()) { String key= (String) it.next(); String value= (String) cv.get(key); updateBuilder.updateColumnValue(key, value); } updateBuilder.update(); } catch (SQLException e) { e.printStackTrace(); }}
这边有几个注意的地方,一个是updateBuilder.where().eq("age", age);
这句话相当于sql中where age=’xxxx’,然后遍历一下contentValues,然后用updateColumnValue方法更新,最后再update一下
ContentValues cv=new ContentValues();cv.put("sex", "1");dao.updateOne(cv, 4);
仅仅修改age为4的那条记录的sex为1
修改成功
7
再来试试删除
public void delete(int age) { DeleteBuilder builder=dao.deleteBuilder(); try { builder.where().eq("age", age); builder.delete(); } catch (SQLException e) { e.printStackTrace(); }}
这边同更新一样,有个deleteBuilder对象提供where的能力
我们删除年龄为29的那条记录 dao.delete(29);
ok,记录没了
8
再多试试几个方法
根据条件查询
public void queryOne(int age) { HashMap<String, Object> map=new HashMap<>(); map.put("age", ""+age); ArrayList<User> users=null; try { users= (ArrayList<User>) dao.queryForFieldValues(map); } catch (SQLException e) { e.printStackTrace(); } for (int i=0;i<users.size();i++) { User user=users.get(i); System.out.println("name:"+user.getName()+" sex:"+user.getSex()+" age:"+user.getAge()); }}
查询年龄为22岁的 dao.queryOne(22)
正确返回1条记录
9
最后我们试一下多表查询,刚才我们是创建了user,现在我们要给每个人设置一个权限,比如某几个id的user才有权限做什么事情,那么我们依葫芦画瓢创建一个权限表Authority,比较重要的地方在于设置外键部分
@DatabaseField (columnName = "user_id", canBeNull = true, foreign = true)public User user;
虽然设置了User对象,但是实际上也就是user中的id被存进了数据库中,关联的时候就是这个Authority中的user对象的id跟User表中的id去做关联
public void getQuery(Context context) { try { ArrayList<Authority> authorities= (ArrayList<Authority>) dao.queryForAll(); for (int i=0;i<authorities.size();i++) { Authority authority=authorities.get(i); if (DB.getInstance(context).getDao(User.class).refresh(authority.getUser())==1) { System.out.println(authority.getUser().getName()); } } } catch (SQLException e) { e.printStackTrace(); }}
这边简单的分析以下,我们首先遍历表里面所有的Authority对象,然后去User表里面查,发现Authority中user_id与User中id相同,那么就匹配上了
好了,今天的介绍到此为止,如有问题,请留言,咱们一起研究。
- 初步掌握ORMLite的使用
- OrmLite 框架的使用
- ormlite的使用
- ormlite的事务使用
- ORMLite的使用
- ORMLite的使用
- Android ORMLite的使用
- OrmLite的使用技巧
- OrmLite的使用
- Android ORMLite 的使用
- Ormlite的工具使用
- requireJS的初步掌握
- ORMLite的使用,ormlite的基本使用方式
- 简单的使用ORMLite数据库
- OrmLite的快速使用方案
- Ormlite的简单使用详解
- requireJS的初步掌握(二)
- requireJS的初步掌握(二)
- 在linux下利用nohup来后台运行java程序
- 【MAC版】Android ADB server didn't ACK * failed to start daemon *解决办法
- C#(WPF)程序将Debug中的.exe文件放入注册表中启动,获取错误的当前路径--解决方案
- JDBC基本应用
- 后台运行命令nohup、job 等
- 初步掌握ORMLite的使用
- poj 2762 Going from u to v or from v to u?(SCC缩点+拓扑排序)
- django1.8数据库显示时间比本地时间小8个小时怎么解决
- Linux---修改用户的密码
- 2.29
- win7 64BIT下使用VC2005的问题
- java 遍历arrayList的四种方法
- swift学习
- VLAN