ORMLite学习入门笔记

原创 2013年07月17日 19:09:29

使用原始的SQLiteHelper来操作维护数据库有点过于繁琐,重复工作量较大。所以会想到使用一个比较方便的ORM来维护我们本地的数据库,各位业界前辈都给我推荐了ORMLite(官网:http://ormlite.com/),以其小巧方便,在Android数据库维护上深受大家的喜爱。

 

但是ORMLite的文档有比较少,官方老外写的文档又长又乱,我等考不过托福雅思的我也就简单的看了看。把自己写了一个demo,记录一下使用的过程和步骤。

 

Jar 包的下载地址在:Orm jar包的下载地址

我们需要下载 core 和 android 两个jar,放在工程中就好


一、设置建立自己的与数据库表对应的pojo

 

/**
 * @author zhoushengtao
 * @since 2013-7-16 下午7:39:05
 */

package com.stchou.helloormlite;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
/**
 * 数据库对应的pojo类,注意一下三点
 * 1、填写表的名称 @DatabaseTable
 * 2、填写表中持久化项的 @DatabaseField 还可使顺便设置其属性
 * 3、保留一个无参的构造函数
 */
//表名称
@DatabaseTable(tableName = "user")
public class User
{
    // 主键 id 自增长
    @DatabaseField(generatedId = true)
    private int id;
    // 映射
    @DatabaseField(canBeNull = false)
    private String username;
    // 不为空
    @DatabaseField(canBeNull = false)
    private String password;
    
    @DatabaseField(defaultValue = "")
    private String nickname ;
    
    public User()
    {
        // ORMLite 需要一个无参构造
    }

    /**
     * @return the id
     */
    public int getId()
    {
        return this.id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id)
    {
        this.id = id;
    }

    /**
     * @return the username
     */
    public String getUsername()
    {
        return this.username;
    }

    /**
     * @param username the username to set
     */
    public void setUsername(String username)
    {
        this.username = username;
    }

    /**
     * @return the password
     */
    public String getPassword()
    {
        return this.password;
    }

    /**
     * @param password the password to set
     */
    public void setPassword(String password)
    {
        this.password = password;
    }

  
    @Override
    public String toString()
    {
        String text = "";

        text += "\nid = " + id;
        text += "\nusername = " + username;
        text += "\npassword = " + password;
        return text;
    }

}

@DatabaseField 可以注释一下成员

columnName

String

数据库表中对应的列名称,如果没有设置,系统将自动生成

dataType

 

字段的数据类型。通常情况下,数据类型是从java类的成员变量获取的,并不需要进行特殊指出。它相当于是SQL的数据类型。

defaultValue

String

当心插入一条数据时候的默认值,如果没有将为none

width

Integer

字段的宽度,主要用于字符串字段。默认是0,意味着采用默认的数据类型和具体的数据库的默认情况。对于字符串以为在255个字符即使有些数据库并不支持。

canBeNull

Boolean

默认值为true,如果设置为false,insert数据是必须保证该列项必须存在一个值。

id

Boolean

不管这个字段是否是id,默认值都是false。作为数据库中的主键存在一个类中。id、generatedId和generatedIdSequence三者只能同时出现一个

generatedId

Boolean

自增长id,默认值为false。调用Dao.create()时候会增加1。id、generatedId和generatedIdSequence三者只能同时出现一个。

generatedIdSequence

String

序列编号的名字,这个值在生成的时候会被使用。和generatedId相似,但是你能够指定使用的序列名称。默认是没有的。一个class中只有一个成员变量可以设置这个值。这仅仅在数据库需要序列生成id时才需要它。如果你选择使用generatedId代替它,那么代码将自动增加序列名。

foreign

Boolean

默认值为false,相当于数据库中的外键,链接其他类存储在数据库中。这个字段必须存在自己的原始类型,另一个类必须存在一个id字段(id、generatedid、generatedIdSequence中的一个)

useGetSet

Boolean

申明这个字段可以使用Java类中的get、set映射到数据库表中的赋值和获取。默认值为false

….

 

 

 

 

 

 

 

二、新建一个OpenHelper继承OrmLiteSqliteOpenHelper这个类。

1、  这类创建和扩展必须实现

onCreate(SQLiteDatabase db,ConnectionSource connectionSource)

onUpgrade(SQLiteDatabase db,ConnectionSource connectionSource, int oldVersion, int newVersion)

两个方法

 

2、  初始化DAO。

Dao<T,V>

包含两个泛型,第一个泛型表DAO操作的类,第二个表示操作类的主键类型


当然,ORMLite很有趣的是它存在一个RuntimeExceptionDao这个东西是针对JDBC和一些其他的SQL的。对于Android平台主要是处理了过多繁琐的try…catch…的书写,和一些语法错误带来的崩溃,建议使用。

 

/**
 * @author zhoushengtao
 * @since 2013-7-16 下午7:09:08
 */

package com.stchou.helloormlite;

import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.RuntimeExceptionDao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log;

import java.sql.SQLException;

public class DatabaseHelper extends OrmLiteSqliteOpenHelper
{
    private static final String TAG = "DatabaseHelper";
    // 数据库名称
    private static final String DATABASE_NAME = "HelloOrmlite.db";
    // 数据库version
    private static final int DATABASE_VERSION = 1;

    private Dao<User, Integer> userDao = null;
    private RuntimeExceptionDao<User, Integer> userRuntimeDao = null;

    public DatabaseHelper(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
       // 可以用配置文件来生成 数据表,有点繁琐,不喜欢用
       // super(context, DATABASE_NAME, null, DATABASE_VERSION, R.raw.ormlite_config);
    }

    /**
     * @param context
     * @param databaseName
     * @param factory
     * @param databaseVersion
     */
    public DatabaseHelper(Context context, String databaseName, CursorFactory factory, int databaseVersion)
    {
        super(context, databaseName, factory, databaseVersion);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource)
    {
        try
        {
            //建立User表
            TableUtils.createTable(connectionSource, User.class);
            //初始化DAO
            userDao = getUserDao();
            userRuntimeDao = getUserDataDao();
        }
        catch (SQLException e)
        {
            Log.e(TAG, e.toString());
            e.printStackTrace();
        }

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int oldVersion, int newVersion)
    {
        try
        {
            TableUtils.dropTable(connectionSource, User.class, true);
        }
        catch (SQLException e)
        {
            Log.e(TAG, e.toString());
            e.printStackTrace();
        }
    }

    /**
     * @return
     * @throws SQLException
     */
    private Dao<User, Integer> getUserDao() throws SQLException
    {
        if (userDao == null)
            userDao = getDao(User.class);
        return userDao;
    }

    public RuntimeExceptionDao<User, Integer> getUserDataDao()
    {
        if (userRuntimeDao == null)
        {
            userRuntimeDao = getRuntimeExceptionDao(User.class);
        }
        return userRuntimeDao;
    }
    
    /**
     * 释放 DAO
     */
    @Override
    public void close() {
        super.close();
        userRuntimeDao = null;
    }

}

 

三、将使用的Activity继承 OrmLiteBaseActivity,针对维护的数据,进行增删查改。

 只需要使用DAO调用相应的CURD方法就好了,名称命名很好,灰常简单,不做过多讲解,看一次代码就知道了

 

package com.stchou.helloormlite;

import com.j256.ormlite.android.apptools.OrmLiteBaseActivity;
import com.j256.ormlite.dao.RuntimeExceptionDao;
import com.j256.ormlite.stmt.DeleteBuilder;

import android.os.Bundle;
import android.widget.TextView;

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

public class MainActivity extends OrmLiteBaseActivity<DatabaseHelper>
{
    private TextView mTextView;
    private RuntimeExceptionDao<User, Integer> mUserDAO;

    User user;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mUserDAO = getHelper().getUserDataDao();

        mTextView = (TextView)findViewById(R.id.message);

        deleteAll();
        mTextView.append("\n#######Begin to Insert#########\n");
        insertTest();
        display();
        mTextView.append("\n#######Begin to Update#########\n");
        user.setUsername("update");
        update(user);
        display();
        mTextView.append("\n#######Begin to Delete#########\n");
        delete("name2");
        display();
        mTextView.append("\n#######Begin to Search#########\n");
        mTextView.append(search("name1").toString());
    }

    /**
     * 插入值测试
     */
    private void insertTest()
    {
        for (int i = 0; i < 5; i++)
        {
            user = new User();
            user.setUsername("name" + i);
            user.setPassword("test_pass " + i);
            mUserDAO.createIfNotExists(user);
        }
    }

    /**
     * 更新
     * 
     * @param user 待更新的user
     */
    private void update(User user)
    {
        mUserDAO.createOrUpdate(user);
        // mUserDAO.update(user);
    }

    /**
     * 按照指定的id 与 username 删除一项
     * 
     * @param id
     * @param username
     * @return 删除成功返回true ,失败返回false
     */
    private int delete(String username)
    {
        try
        {
            // 删除指定的信息,类似delete User where 'id' = id ;
            DeleteBuilder<User, Integer> deleteBuilder = mUserDAO.deleteBuilder();
            deleteBuilder.where().eq("username", username);

            return deleteBuilder.delete();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 按照id查询user
     * 
     * @param id
     * @return
     */
    private User search(String username)
    {
        try
        {
            // 查询的query 返回值是一个列表
            // 类似 select * from User where 'username' = username;
            List<User> users = mUserDAO.queryBuilder().where().eq("username", username).query();
            if (users.size() > 0)
                return users.get(0);
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 删除全部
     */
    private void deleteAll()
    {
        mUserDAO.delete(queryAll());
    }

    /**
     * 查询所有的
     */
    private List<User> queryAll()
    {
        List<User> users = mUserDAO.queryForAll();
        return users;
    }

    /**
     * 显示所有的
     */
    private void display()
    {
        List<User> users = queryAll();
        for (User user : users)
        {
            mTextView.append(user.toString());
        }
    }
}

 当然很多情况下我们无法直接继承:

OrmLiteBaseActivity

我们就可以这样来获取Helper

private DataHelper databaseHelper = null; 
public DataHelper getHelper() {  
        if (databaseHelper == null) {  
            databaseHelper = OpenHelperManager  
                    .getHelper(this, DatabaseHelper.class);  
        }  
        return databaseHelper;  
    }  





 带上两个附件:


整个Android demo的打包 :点击打开链接

 官方ORMLite说明手册:点击打开链接

版权声明:转载请标注:http://blog.csdn.net/yzzst 。 本文为博主原创文章,未经博主允许不得转载。作者:周圣韬(北漂周)

相关文章推荐

Android 快速开发系列 ORMLite 框架最佳实践

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39122981,本文出自【张鸿洋的博客】上一篇已经对ORMLite框架做了简单的介...

android OrmLite 入门

android OrmLite 入门android ormlite大家在开发中经常会用到数据库,但是数据库的操作其实挺繁琐的,为了方便我们的使用,所以我们来使用当下流行的orm框架进行数据库的操作,下...

Ormlite 介绍 一

概述            ORMlite是类似hibernate的对象映射框架,主要面向java语言,同时,是时下最流行的android面向数据库的的编程工具。 官方网站:http://orm...
  • sbvfhp
  • sbvfhp
  • 2014年03月04日 14:28
  • 10708

ORMLite使用示例

ORMLite是一款优秀的轻量级的ORM框架,常用于Android平台,但它并不是 Android 平台专用的ORM框架,它也可用于普通的Java环境中。 ORMLite除了支持Sqlite外还支持M...

ORMLite 框架最佳实践

ORMLite 框架最佳实践

ORMLite完全解析(三)官方文档第三章、自定义查询构造器 Custom Query Builder

接着上一篇,下面是第三章的翻译整理,理解错误的地方还请批评指正。           原文档:http://ormlite.com/javadoc/ormlite-core/doc-files/or...

关于ormlite-android用法详解

首先说明一下,本人已经使用ormlite-android做过两个大型的项目开发,很久以来就想对此数据库做一些总结,正好今天有空就写出来: 1. 首先去官网http://ormlite.com/看官方...

Android 使用ORMLite 操作数据库

用过ssh,s2sh的肯定不会陌生 ,应该一学就会 第一步:           下载ormlite-android-4.41.jar和ormlite-core-4.41.jar两个jar包,放入...

OrmLite删除对象时注意

先看看Bean的定义:

ORMLite完全解析(二)官方文档第二章、如何使用ORMLite

前面一篇文章通过一个实例,介绍了ORMLite的使用方法,为了控制篇幅,里面的代码有些是不完整的,但是基本能够说明整个流程。对于这类开源框架,要记住所有内容,是不可能的,而且也不是最合理的学习方法,其...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORMLite学习入门笔记
举报原因:
原因补充:

(最多只允许输入30个字)