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实现数据持久化的简单使用的更多相关文章

  1. Android开发 ---ORMLite实现数据的增删改查,单例模式,Dao栈

    效果图: 项目目录截图: 1.activity_main.xml 描述: 两行显示8个按钮 <?xml version="1.0" encoding="utf-8& ...

  2. Android开发学习之路--数据持久化之初体验

    上班第一天,虽然工作上处于酱油模式,但是学习上依旧不能拉下,接着学习android开发吧,这里学习数据持久化的 知识. 其实数据持久化就是数据可以保存起来,一般我们保存数据都是以文件,或者数据库的形式 ...

  3. Android中的数据持久化机制

    Android中几种最简单但是却最通用的数据持久化技术:SharedPreference.实例状态Bundle和本地文件. Android的非确定性Activity和应用程序生存期使在会话间保留UI状 ...

  4. $《第一行代码:Android》读书笔记——第6章 数据持久化

    主要讲述了Android数据持久化的三种方式:文件存储.SharedPreference存储.SQLite数据库存储. (一)文件存储 其实Android中文件存储方式和Java的文件操作类似,就是用 ...

  5. Android学习_数据持久化

    数据持久化:将内存中的瞬时数据存储到设备中 1. 文件存储 存储一些简单的文本数据或二进制数据. 核心:Context类提供的openFileOutput()和openFileInput()方法,然后 ...

  6. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  7. iOS数据持久化-OC

    沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...

  8. iOS数据持久化

    在iOS中,实现数据持久化一般分为4大种: 1.属性列表 2.对象归档 3.SQLite 4.Core Data 一.属性列表 NSUserDefaults类的使用和NSKeyedArchiver有很 ...

  9. 【转】Android 使用ORMLite 操作数据库

    Android 使用ORMLite 操作数据库   用过ssh,s2sh的肯定不会陌生 ,应该一学就会 第一步: 下载ormlite-android-4.41.jar和ormlite-core-4.4 ...

随机推荐

  1. Linux下修改用户home目录

    一般在Linux上新建一个用户,会在/home目录下自动创建一个以用户名命名的home目录 修改linux下用户自动建立的家目录 vi编辑器打开/etc/default/useradd 这个文件,然后 ...

  2. TestDriven.NET – 快速入门

    TestDriven.NET – 快速入门[译文] 介绍 这部分将提供一个快速的入门向导,在vs.NET的任何一个版本上面使用TestDriven.NET TDD(测试驱动开发)在你写你的代码之前,写 ...

  3. 使用gcc编译gdb调试

    gcc 在linux系统中,默认是没有安装gcc编译器的,可以通过命令 rpm -q | grep gcc 来查看.安装命令为: yum -y install gcc 安装后,编写一个.c结尾的文件. ...

  4. Call me, maybe?

    Hey, I just met you, and this is crazy, but here's my number so call me, maybe? @Test public void te ...

  5. wikioi 1214 线段覆盖

    题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,--N.这些坐标都是区间(-999,999)的整数.有些线段 ...

  6. jquery对象和javascript对象相互转换

    本文转载:http://jeiofw.blog.51cto.com/3319919/786506 jQuery 对象是通过 jQuery 包装DOM 对象后产生的对象.jQuery 对象是 jQuer ...

  7. rsync服务架设(数据同步|文件增量备份)

        近期由于业务需要,需要将两台服务器数据保持同步.方案有很多,rsync是其中一种解决方案,本文对rsync的安装及配置进行简单说明,其他实现方式有兴趣可以研究.以下是本文提纲,供参考: rsy ...

  8. Codeforces Round #332 (Div. 2) A. Patrick and Shopping 水题

    A. Patrick and Shopping Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

  9. Android Developers:在命令行构建和运行

    使用Ant构建脚本构建你的应用程序有两种方式:一种用于测试/调试你的引用程序—debug模式—另一种用于构建你最终发布的包-release模式.无论你使用哪种方式构建你的应用程序,它必须在安装在模拟器 ...

  10. w3cmark前端精彩博文周报 10.13-10.19

    w3cmark推出每周精选前端博文推荐,通过阅读别人的代码,学习别人的经验,提升自己的水平.欢迎关注 @前端笔记网 微博.其实如果是关注我们微博的朋友都对下面的文章熟悉,因为我们会一旦发现有价值的.精 ...