【Android后台】【转载】android持久化数据库包ormlite的使用

在网上关于ormlite的使用好的文章链接相当多。

自己的学习感悟:

Android ormlite的使用过程中主要有三个方米啊:

(1)、建立pojo,定义数据库的model

(2)、新建一个OpenHelper继承OrmLiteSqliteOpenHelper这个类。

       在这个过程中需要做两个事,

     一是将OrmLiteSqliteOpenHelp中的两个方法

      onCreate(SQLiteDatabase db,ConnectionSource connectionSource)

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

      实现。

      二是初始化DAO。(DAO有的单独列出一个文件来写,但是个人认为应该就写在OpenHelper)

     格式为:Dao<T,V>包含两个泛型,第一个泛型表DAO操作的类,第二个表示操作类的主键类型

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

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

 

附代码:

一、User.java

/**
 * @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;
    }

}

二、包含DAO的DatabaseHelper.java

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方法就好了,名称命名很好,灰常简单,不做过多讲解,看一次代码就知道了

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

运行效果截图:

 

 

 

 

 

ps:使用时出现疑问的其它的参考资料。

http://blog.csdn.net/jwzhangjie/article/details/23753705

http://www.csdn            123.com/html/blogs/20130717/38808.htm(将csdn                 123 中间的空格去掉= =)

 

posted @ 2014-12-14 23:26  比企谷雪乃  阅读(189)  评论(0编辑  收藏  举报