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. Django 使用原生SQL

    def dictfetchall(cursor): "将游标返回的结果保存到一个字典对象中" desc = cursor.description return [ dict(zip ...

  2. Failed to execute query: Duplicate entry '0' for key 'PRIMARY'

    今天在做php登陆和登出会插入数据到log表中,,结果报错了:如下: Failed to execute query: Duplicate entry '0' for key 'PRIMARY' SQ ...

  3. Host key verification failed解决

    SSH 登录失败:Host key verification failed 由于公钥不一样了,所以无法登录,提示信息是 KEY 验证失败. 解决方法是: 在 /root/.ssh/known_host ...

  4. hibernate二级缓存ehcache

    与Session相对的是,SessionFactory也提供了相应的缓存机制.SessionFactory缓存可以依据功能和目的的不同而划分为内置缓存和外置缓存. SessionFactory的内置缓 ...

  5. C++ 预编译头文件

    1.解决什么问题? C++ 编译器是单独,分别编译的,每个cpp文件,进行预编译(也就是对#include,define 等进行文本替换),生成编译单元.编译单元是一个自包含文件,C++编译器对编译单 ...

  6. 2015 NOIP day2 t2 信息传递 tarjan

    信息传递 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.luogu.org/problem/show?pid=2661 Descrip ...

  7. delphi ExecWB

    TWebBrowser.ExecWB 关键点 procedure ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT); overload; 实现过程 ...

  8. android应用程序监听SMS Intent广播

    当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent. 对于应用程序监听SMS Intent广播,首先需 ...

  9. 第2章 数字之魅——寻找最大的K个数

    寻找最大的K个数 问题描述 在面试中,有下面的问答: 问:有很多个无序的数,我们姑且假定它们各不相等,怎么选出其中最大的若干个数呢? 答:可以这样写:int array[100] …… 问:好,如果有 ...

  10. 谷歌chrome浏览器桌面提醒 webkitNotifications

    原创: //点击时开启提醒 $(".message_alert").toggle(function(){ $(".message_alert_tip").htm ...