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

    }

}

 

运行结果如下:

 

posted @ 2015-06-15 09:43  银色的流星  阅读(683)  评论(0编辑  收藏  举报