Android之ORMLite实现数据持久化的简单使用
Android中内置了sqlite,但是常用的开发语言java是面向对象的,而数据库是关系型的,二者之间的转化每次都很麻烦。(作为程序员,应该学会偷懒)而Java Web开发中有很多orm框架(其实我没学过java web),但是想直接放到Android上用有些麻烦。尝试了一下找Android的orm框架,于是便发现了ORMLite。
首先到官方网站了解一下ormlite:http://ormlite.com/。
然后下载两个jar包,一个是ormlite-core-4.48.jar,另一个是ormlite-android-4.48.jar。(当然,也可以下载对应文档)下载地址为:http://ormlite.com/releases/。
接着做一个简单的操作实现吧(实现对数据库的创表以及增删查改)。
新建一个工程名为“zhj_ORMLite”,包名为“com.topcsa.zhj_ormlite”,选择SDK版本为14,将ormlite-core-4.48.jar和ormlite-android-4.48.jar添加带项目当中。
创建一个实体类Person,这个类就是需要创建的表。
代码中的@DatabaseTable 指定类对应的表明,@DatabaseField 对应的字段名
package com.topcsa.zhj_ormlite; import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable; @DatabaseTable(tableName = "tb_Person")
public class Person { public Person() {
} public Person(String name, int age) {
super();
this.name = name;
this.age = age;
} @DatabaseField(generatedId = true)//generatedId 表示id为主键且自动生成
private int id;
@DatabaseField(columnName = "name")
private String name;
@DatabaseField(columnName = "age")
private int age; 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 int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} }
创建一个database helper类,继承OrmLiteSqliteOpenHelper 实现 onCreate 和 onUpgrade ,这个类类似于 android 的SQLiteOpenHelper方法 ,大家应该知道这个类的作用了,创建删除数据库应该使用TableUtils工具类的方法。
创建表,我们直接使用ormlite提供的TableUtils.createTable(connectionSource, Person.class);进行创建。
更新表,使用ormlite提供的TableUtils.dropTable(connectionSource, Person.class, true);进行删除操作。
package com.topcsa.zhj_ormlite; import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log; import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils; public class DBhelper extends OrmLiteSqliteOpenHelper { private static final String TABLE_NAME = "ormlite.db";
private static DBhelper instance; public DBhelper(Context context) {
super(context, TABLE_NAME, null, 1);
// TODO Auto-generated constructor stub
} /**
* 单例获取该Helper
*
* @param context
* @return
*/
public static synchronized DBhelper getHelper(Context context) {
if (instance == null) {
synchronized (DBhelper.class) {
if (instance == null)
instance = new DBhelper(context);
}
} return instance;
} @Override
public void onCreate(SQLiteDatabase database,
ConnectionSource connectionSource) {
try {
TableUtils.createTable(connectionSource, Person.class);
Log.d("DBhelper", "创建表成功");
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } @Override
public void onUpgrade(SQLiteDatabase database,
ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
TableUtils.dropTable(connectionSource, Person.class, true);
} catch (java.sql.SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
onCreate(database, connectionSource); } }
创建DAO类,建立PersonDao.java。
package com.topcsa.zhj_ormlite; import java.sql.SQLException;
import java.util.List; import android.content.Context;
import android.util.Log; import com.j256.ormlite.dao.Dao; public class PersonDao { Context con;
private DBhelper helper;
private Dao<Person, Integer> personDao; // 构造函数
public PersonDao(Context con) {
helper = DBhelper.getHelper(con);
this.con = con;
} // 每个表一般我们都会单独写个Dao用于操作
public Dao<Person, Integer> getPersonDao() throws java.sql.SQLException {
if (personDao == null) {
personDao = helper.getDao(Person.class);
}
return personDao;
} // 根据ID查询
public Person selectPerson(int i) {
try {
Person p = getPersonDao().queryForId(i);
Log.d("TAG", "查询ID为" + i + "的人为:" + p.getName());
return p;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
} // 添加某人
public void addPerson(Person p) {
try {
getPersonDao().create(p);
Log.d("TAG", "添加:" + p.getName());
} catch (SQLException e) {
}
} // 删除某人
public void deletePerson(Person p) {
try {
Log.d("TAG", "删除ID为" + p.getId() + "的人:" + p.getName());
getPersonDao().deleteById(p.getId()); } catch (SQLException e) {
}
} // 更新某人
public void updatePerson(Person p, String name) {
try {
Log.d("TAG", "修改数据前姓名为:" + p.getName());
p.setName(name);
getPersonDao().update(p);
Log.d("TAG", "修改数据后姓名为:" + p.getName());
} catch (SQLException e) {
}
} // 查询所有人
public List<Person> showPersonAll() {
try {
List<Person> list = getPersonDao().queryForAll();
Log.d("TAG", "查询所有数据条数:" + list.size());
for (int i = 0; i < list.size(); i++) {
Log.d("TAG", "单条数据姓名:" + list.get(i).getName());
}
return list;
} catch (SQLException e) {
}
return null;
} }
最后,在Activity中具体实现:
package com.topcsa.zhj_ormlite; import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Person p = new Person("赵江", 21);
PersonDao pdao = new PersonDao(this);
try {
pdao.addPerson(p);
p = new Person("黄秋", 21);
pdao.addPerson(p);
p = new Person("何权利", 21);
pdao.addPerson(p);
p = new Person("任贵权", 21);
pdao.addPerson(p);
p = new Person("涂俊", 21);
pdao.addPerson(p);
pdao.showPersonAll();
System.out
.println("-------------------------------天王盖地虎------------------------------");
Person p1 = pdao.selectPerson(2);
pdao.updatePerson(p1, "~~~~苏苏~~~~");
p = pdao.selectPerson(1);
pdao.deletePerson(p);
pdao.showPersonAll();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }
运行结果如下:
Android之ORMLite实现数据持久化的简单使用的更多相关文章
- Android开发 ---ORMLite实现数据的增删改查,单例模式,Dao栈
效果图: 项目目录截图: 1.activity_main.xml 描述: 两行显示8个按钮 <?xml version="1.0" encoding="utf-8& ...
- Android开发学习之路--数据持久化之初体验
上班第一天,虽然工作上处于酱油模式,但是学习上依旧不能拉下,接着学习android开发吧,这里学习数据持久化的 知识. 其实数据持久化就是数据可以保存起来,一般我们保存数据都是以文件,或者数据库的形式 ...
- Android中的数据持久化机制
Android中几种最简单但是却最通用的数据持久化技术:SharedPreference.实例状态Bundle和本地文件. Android的非确定性Activity和应用程序生存期使在会话间保留UI状 ...
- $《第一行代码:Android》读书笔记——第6章 数据持久化
主要讲述了Android数据持久化的三种方式:文件存储.SharedPreference存储.SQLite数据库存储. (一)文件存储 其实Android中文件存储方式和Java的文件操作类似,就是用 ...
- Android学习_数据持久化
数据持久化:将内存中的瞬时数据存储到设备中 1. 文件存储 存储一些简单的文本数据或二进制数据. 核心:Context类提供的openFileOutput()和openFileInput()方法,然后 ...
- 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发
[原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文 http: ...
- iOS数据持久化-OC
沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...
- iOS数据持久化
在iOS中,实现数据持久化一般分为4大种: 1.属性列表 2.对象归档 3.SQLite 4.Core Data 一.属性列表 NSUserDefaults类的使用和NSKeyedArchiver有很 ...
- 【转】Android 使用ORMLite 操作数据库
Android 使用ORMLite 操作数据库 用过ssh,s2sh的肯定不会陌生 ,应该一学就会 第一步: 下载ormlite-android-4.41.jar和ormlite-core-4.4 ...
随机推荐
- socket断开连接的四次握手及常见过程解析
TCP的协议文档对TCP的一些规定:文档名称-RFC793 TCP消息头的控制位 URG:紧急指针字段有效 ACK:确认头部字段有效 PSH:强制函数 RST:重置链接 SYN:同步系列号码 FIN ...
- 在VS.NET中根据条件设置不同的MainForm
在VS.NET中有时候需要根据不同的条件设置不同的MainForm,例如:在程序第一次运行时候打开设置基本信息或服务器信息窗口等. 1.找到VS.NET中设置MainForm的窗口: 2.在编辑窗口中 ...
- RSA前台js加密,后台C#解密
一.需求: 为了安全,项目中前台登陆用的密码需要加密传到后台,后台c#解密登陆密码. 二.解决方案 采用非对称加密算法RSA来达到目的,前台登陆页面一加载便发送一次ajax请求获取后台产生的公钥,用于 ...
- python的深拷贝和浅拷贝
import copy list1=[1,2,3,4,5] c_list1=list1 c_list1[0]=-1 for i in list1: print str(i)+' ', #输出的世 -1 ...
- 关于struts2 验证框架在联网的时候可以用,不联网不起作用的问题
这是一个让我很头痛的问题,我是在一个其他的项目框架的基础上来开发新的项目. 当使用struts验证框架时,突然发现这个验证不起作用了,我就纳闷了之前用这个开发的项目好好的怎么到我这就不能用了呢? xm ...
- 如何防止ListView控件闪烁
如何防止ListView控件闪烁 beginupdate()和endupdate()之间写代码 ListView1.Items.BeginUpdate;ListView1.Items.Add('A ...
- C++ 排序函数 sort(),qsort()的使用方法
想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描写叙述 sort 对给 ...
- 【ZZ】C 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化
C 语言中的指针和内存泄漏 http://www.ibm.com/developerworks/cn/aix/library/au-toughgame/ 本文讨论了几种在使用动态内存分配时可以避免的陷 ...
- MySQL 灵异事件一则 -- desc报语法错误
今天有一开发同学找到我,说查询SQL中倒序报错,不明原因,于是奔赴工位现场研究情况. 果然,只要SQL中带有desc 就会报错,而ASC没问题. 哪怕desc放在句首用作explain也会报错. 报错 ...
- python学习笔记概述
第一次接触python是因为一个项目需要做自动化测试,因为各种限制没有使用QTP,选择了开源的比较流行的selenium,但如果只是靠selenium进行录制脚本.修改脚本这个很多时候没办法满足需求, ...