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 ...
随机推荐
- Android游戏之平台接入的一点记录
最近手头有需要接入多个渠道的工作,我负责的是Android方面的接入,一般来说,渠道是非常多的,每一个渠道调用的接口都不一致,如果每一个渠道都要自己去弄回非常的耗时,所以网上会有一些接入的中间件提供商 ...
- libevent的使用方法--回显服务器的简单实例
#include <event.h> #include <sys/types.h> #include <sys/socket.h> #include <net ...
- SQL Select的执行顺序
1.FROM 2.ON 3.JOIN 4.WHERE 5.GROUP BY 6.WITH CUBE or WITH ROLLUP 7.HAVING 8.SELECT 9.DISTINCT 10.ORD ...
- cocos2d-x的初步学习二十一之iosandroid跨平台环境配置
这篇文章中,我们将来构建下跨平台开发的环境配置,我自己也是参考了别人了文章,折腾了几个小时,尤其是android的配置相对麻烦些.... 参考自子龙山人:http://www.cnblogs.com/ ...
- Java模拟登陆【转载】
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...
- IOS 常用第三方库
名称 特性 效果图 FXBlurView 实时背景模糊效果 FDFullscreenPopGesture 让UINavigationController在屏幕任何位置均可滑动返回 NJKWebVi ...
- python手记(50)
#!/usr/bin/env python # -*- coding: utf-8 -*- #http://blog.csdn.net/myhaspl #code:myhaspl@qq.com imp ...
- iOS开发——UI_swift篇&TableView实现页眉和页脚
TableView实现页眉和页脚 在UItableView中header和footer是很常见的,而且他能让你实现很复杂的功能,我们见过最多的就是下拉刷新和上啦加载更多,当然你还可以在上面添加一个 ...
- MySQL 5.7 新特性大全和未来展望 图解
本文转自微信公众号:高可用架构 作者:杨尚刚 引用 美图公司数据库高级 DBA,负责美图后端数据存储平台建设和架构设计.前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务 ...
- 在线服务之socket编程科普
简介 本篇文章是介绍一个典型的在线C++服务的最底层socket管理是如何实现的. 文章会从一个最简单的利用socket编程基础API的一个小程序开始,逐步引入现在典型的select,epoll机制, ...