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. Angularjs 初始化框架

    bindJQuery(); publishExternalAPI(angular); jqLite(document).ready(function() { angularInit(document, ...

  2. CKeditor3.6.2 配置与精简

    一.使用方法: 1.在页面<head>中引入ckeditor核心文件ckeditor.js <script type="text/javascript" src= ...

  3. twisted 安装时,安装顺序为 zope.interface ->twisted

    最近想学 twisted ,就去下载 twisted 的windows版本,并且 安装.运行 twisted 例子后,发现出现了问题: ImportError: Twisted requires zo ...

  4. Codeforces Round #274 (Div. 1) B. Long Jumps 数学

    B. Long Jumps Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/480/problem/ ...

  5. 第十七章,txt文件的写入和读取数据结合练习(C++)

    #include <iostream> #include <fstream> int main(int argc, char** argv) { std::string str ...

  6. android拦截短信并屏蔽系统的Notification

    拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限 <uses-permission  ...

  7. cc代码学习笔记1

    #define #define INT32 int #define INT8 char #define CHAR char #define SSHORT signed short #define IN ...

  8. Java多线程中start()和run()的区别

    Java的线程是通过java.lang.Thread类来实现的.VM启动时会有一个由主方法所定义的线程.可以通过创建Thread的实例来创建新的线程.每个线程都是通过某个特定Thread对象所对应的方 ...

  9. Yar - Yet Another RPC framework for PHP

    Introduction Yar is a RPC framework which aims to provide a simple and easy way to do communication ...

  10. Eclipse launch failed.Binary not found解决方案

    配置完成后建立工程测试,发现建立Hello World c++ Project类型的项目后可以运行测试,直接建立空项目写个测试类无法运行,提示"launch failed.Binary no ...