android Sqlite Orm 实现方式

本文详细介绍如何使用ORMLite在Android应用中进行数据库操作。包括ORM的概念介绍、ORMLite的安装配置、Bean类的设计、DAO类的编写及数据库操作测试等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

一直想对数据库的操作进行一个用法整理,翻开现在比较火的GreenDao,里面已经被封装的看不出来最基本CRUD语法了,当然不是说GreenDao不好,至少对初学者来说不太好,学习就应该依序渐进,知其然知其所以然才好。这篇参照某大神blog,加上自己理解整理而来,属于较早期的数据库操作模式。希望对初学者有好的帮助

添加了数据库可视化插件debug_db,方便查看

这里写图片描述

1. 什么是ORM

对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换[1] 。从效果上说,它其实是创建了一个可在编程语言里使用的–“虚拟对象数据库”。简单的理解为对象和数据库表字段的简单映射关系

2. 下载 android ORMLite Jar

http://ormlite.com/releases/
这里写图片描述
在这两版的基础进行操作
依赖jar

3. 配置Bean类

使用不同注解来标示表属性,(字段名,字段类型,主键,外键 etc)

@DatabaseTable(tableName = "tb_article")
public class Article
{
    @DatabaseField(generatedId = true)
    private int id;
    @DatabaseField
    private String title;
    @DatabaseField(canBeNull = true, foreign = true, columnName = "user_id", foreignAutoRefresh = true)
    private User user;

    public int getId()
    {
        return id;
    }

    public void setId(int id)
    {
        this.id = id;
    }

    public String getTitle()
    {
        return title;
    }

    public void setTitle(String title)
    {
        this.title = title;
    }

    public User getUser()
    {
        return user;
    }

    public void setUser(User user)
    {
        this.user = user;
    }

    @Override
    public String toString()
    {
        return "Article [id=" + id + ", title=" + title + ", user=" + user
                + "]";
    }

}

4. 编写DAO类

一般写法就是Dao 和 Bean 对应,dao是对具体表操作的封装,而Bean则是表的映射

package dragger2.nuoyuan.com.myapplication.db;

import android.content.Context;

import com.j256.ormlite.dao.Dao;

import java.sql.SQLException;
import java.util.List;

import dragger2.nuoyuan.com.myapplication.bean.Student;

public class StudentDao {

    private Context context;
    private Dao<Student, Integer> userDaoOpe;
    private DatabaseHelper helper;

    public StudentDao(Context context) {
        this.context = context;
        try {
            helper = DatabaseHelper.getHelper(context);
            userDaoOpe = helper.getDao(Student.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 增加一个用户
     *
     * @param student
     * @throws SQLException
     */
    public void add(Student student) {
        try {
            userDaoOpe.create(student);
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    public Student get(int id) {
        try {
            return userDaoOpe.queryForId(id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public List<Student> queryAll() {
        try {
            return userDaoOpe.queryForAll();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

}

对数据库操作需要用到Sqlite提供的底层Api SQLiteOpenHelper 的帮助,OrmLiteSqliteOpenHelper已经在SQLiteOpenHelper的基础上做了二次封装,我们直接继承OrmLiteSqliteOpenHelper类实现 onCreate(SQLiteDatabase database,ConnectionSource connectionSource)
和 onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) ,来进行数据库的操作以及数据库的升级操作
然后使用单例公布出一个创建实例的方法,getHelper用于获取我们的操作数据库的OpenHelper 实例。

5. 测试

由于测试使用Context环境,无法用AndroidStudo中单元测试来测,推荐在Eclipse中进行尝试测试,需要在Eclipse中配置测试环境

package dragger2.nuoyuan.com.myapplication;


import com.j256.ormlite.dao.Dao;

import java.sql.SQLException;
import java.util.List;

import dragger2.nuoyuan.com.myapplication.bean.Article;
import dragger2.nuoyuan.com.myapplication.bean.Student;
import dragger2.nuoyuan.com.myapplication.bean.User;
import dragger2.nuoyuan.com.myapplication.db.ArticleDao;
import dragger2.nuoyuan.com.myapplication.db.DatabaseHelper;
import dragger2.nuoyuan.com.myapplication.db.StudentDao;
import dragger2.nuoyuan.com.myapplication.db.UserDao;
import dragger2.nuoyuan.com.myapplication.utils.L;


public class TestUtils {

    public void testAddArticle() {
        User u = new User();
        u.setName("000");
        new UserDao(MyApp.context).add(u);
        Article article = new Article();
        article.setTitle("hello world");
        article.setUser(u);
        new ArticleDao(MyApp.context).add(article);

    }

    public void testGetArticleById() {
        Article article = new ArticleDao(MyApp.context).get(1);
        L.e(article.getUser() + " , " + article.getTitle());
    }

    public void testGetArticleWithUser() {
        Article article = new ArticleDao(MyApp.context).getArticleWithUser(1);
        L.e(article.getUser() + " , " + article.getTitle());
    }

    public void testListArticlesByUserId() {
        List<Article> articles = new ArticleDao(MyApp.context).listByUserId(1);
        L.e(articles.toString());
    }

    public void testGetUserById() {
        User user = new UserDao(MyApp.context).get(1);
        L.e(user.getName());
        if (user.getArticles() != null)
            for (Article article : user.getArticles()) {
                L.e(article.toString());
            }
    }

    public void testAddStudent() throws SQLException {
        Dao dao = DatabaseHelper.getHelper(MyApp.context).getDao(Student.class);
        Student student = new Student();
        student.setDao(dao);
        student.setName("杨卫超");
        student.create();
    }

    public String querystudentDao() throws SQLException {
        Student user = new StudentDao(MyApp.context).get(1);
        return user.toString();
    }


}

查看效果

这里写图片描述

注:ORMLite还提供了一些基类ORMLiteBaseActivity,ORMLiteBaseService之类的,便于数据库操作的,这里不做考虑,毕竟项目中很大可能自己也需要继承自己的BaseActvity之类的。

简单的使用到此,ORMLITE 对象映射到表分析

源码下载: http://pan.baidu.com/s/1geRTRBt

引用
Orm入门 http://blog.csdn.net/lmj623565791/article/details/39121377

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灯塔@kuaidao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值