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();
        }

    }

}

运行结果如下:

时间: 2024-07-29 21:30:20

Android之ORMLite实现数据持久化的简单使用的相关文章

Android基础知识(6)—数据持久化之数据存储

阅读前,请浏览此处上方目录. Android基础知识(6)-数据持久化之数据存储 本章内容为个人笔记,参考书籍有:<疯狂的android>第3版.<第一行代码> 首先,我们要知道什么是数据持久化. 数据持久化就是指那些内存中的瞬时数据保存到存储设备中,保证即使手机在关机的情况下,这些数据不会丢失.保存在内存中的数据是处于瞬时状态,保存在存储设备中的数据是处于持久状态.持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统主要提供了三种方式用于简

python 文件处理、数据持久化与正则

一.文件的处理 数据持久化最简单的类型就是普通文件,有时也叫做平面文件(flat file).文件是计算机中由OS(操作系统)管理的具有名字的存储区域,在linux系统上,文件被看作是字节序列. fileobj=open(filename, mode,buffering=-1,...)    打开文件 fileobj是open()函数返回的文件对象 filename需要打开的文件的字符串名 buffering:是否使用缓存,0表示输出无缓存,1表示使用缓存: 负数表示使用默认设置,正数表示使用近

Android 使用ORMLite打造万能泛型Dao简化数据持久化层

前面的一篇文章Android ORM系列之ActiveAndroid 介绍了ActiveAndroid的使用方法,但是ActiveAndroid有一个很明显的缺点,就是所有的实体类必须继承Model类才能进行CRUD,这是典型的php中的ActiveRecord方式的数据库操作.这时候我们会想一下,在Java Web中,hibernate或者mybatis就很好,其实在android中也有这么一个框架,但是这个框架是java的,只不过它支持Android而已,它就是ORMLite.这篇文章不会过

iOS开发-数据持久化Realm的简单使用

Realm是和SQLite一样用于数据存储,但是它有几个特点比其它的数据库要好用: 1.跨平台 :现在绝大多数的应用开发并不仅仅只在 iOS 平台上进行开发,还要兼顾到 Android 平台的开发.为两个平台设计不同的数据库是愚蠢的,而使用 Realm 数据库, iOS 和 Android 无需考虑内部数据的架构,调用 Realm 提供的 API 就可以完成数据的交换,实现 “ 一个数据库,两个平台无缝衔接 ” . 2.简单易用 : Core Data 和 SQLite 冗余.繁杂的知识和代码足

iOS 中级数据持久化——简单的数据库(Sqlite3)

sqlite是嵌入式的和轻量级的sql数据库.sqlite是由c实现的.广泛用于包括浏览器(支持html5的大部分浏览器,ie除外).ios.android以及一些便携需求的小型web应用系统. 数据库无非就是增,删,改,查四种.除了查询以为,其他的三种方法比较类似 //使用数据库之前,打开数据库 - (void)openDB { if (db != nil) { return; } //数据库存储在沙河中的caches文件夹下 NSString * cachesPath = [NSSearch

打造android ORM框架opendroid(三)——持久化数据

在上一篇博客<打造android ORM框架opendroid(二)--自动创建数据库>中,我们介绍了opendroid是怎么做到自动帮我们创建好数据库并通过反射拼凑出创建数据库的SQL语句,接着上面的博客,今天要来介绍一下opendroid数据库持久化(也就是insert操作)是怎么一个流程. 废话不多少,我们马上进入主题. ... 还记得通过opendroid我们是如何将数据保存到数据库的吗? 当时是调用了从OpenDroid类继承过来的save方法,来回顾一下吧. Student stu

Android数据持久化存储

Android数据持久化存储共有四种方式,分别是文件存储.SharedPreferences.Sqlite数据库和ContentProvider.在本篇幅中只介绍前面三种存储方式,因为ContentProvider属于android四大组件之一,所以它的数据存储方式在介绍四大组件的时候说明. 1.文件存储 文件存储不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件当中的,因而它比较适合用于存储一些简单的文本数据或二进制数据. 文件存储有两种方式,一是存储到手机内存中(memor

Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/files/LoginTest.txt------/data/data/(包名)/files/(文件名) 导出的文件内容: 三.实现代码 新建一个Android 工程.这里我选择的是2.1即API 7,进行开发的,其它都是默认下一步下一步即可. /datasave/res/layout/activity

本篇对IOS中常用的5种数据持久化方法进行简单对比总结

 第1种:UserDefaults(iPhone开发[二十]数据持久化总结之第1篇-NSUserDefaults) 1)易用性很强 2)数据存储在.plist文件中 3)一般保存首选项信息.缓存数据等,适用存储较少量数据的情况 4)缺点:无法将自定义对象序列化到属性列表中 第2种:属性列表(iPhone开发[二十一]数据持久化总结之第2篇-属性文件(.plist)) 1)易用性较强 2)数据存储在.plist文件中 3)一般用于存储少量数据,也不适合操作处理大量数据 4)缺点:无法将自定义对象序