当前位置: 首页 > news >正文

Android 数据库框架OrmLite的使用(一)

在这里记录下最基本的用法,官网上可了解相关的介绍。

1、下载OrmLite jar

  在下载android的:ormlite-android-4.48.jar和ormlite-core-4.48.jar,放在你项目的libs目录下。

2、编写Bean类

package com.example.ormlite.bean;

import java.util.Collection;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName="tb_user")  //表明这是数据库中的一张表
public class User {
    @DatabaseField(generatedId=true)  //generatedId表示id为主键切自动生成
    private int id;
    @DatabaseField(columnName="name")  //columnName的值为该字段在数据库表中的列名
    private String name;
    @DatabaseField(columnName="desc")
    private String desc;
    
    public User() {
        
    }
    public User(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
    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 String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", desc=" + desc + "]";
    }        
}

3.编写Dao类

package com.example.ormlite.db;

import java.sql.SQLException;

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

import com.example.ormlite.bean.User;
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;
/**
 * 编写DAO类
 * 原生的数据库操作,需要继承SQLiteOpenHelper,这里我们需要继承OrmLiteSqliteOpenHelper(间接继承了SQLiteOpenHelper)
 * @author Administrator
 *
 */
public class DatabaseHelper extends OrmLiteSqliteOpenHelper{
    private static final String TABLE_NAME="sqlite-test.db";
    private static DatabaseHelper instance;
    
    //userDao,每张表对应一个
    private Dao<User,Integer> userDao;
    public DatabaseHelper(Context context) {
        super(context, TABLE_NAME, null, 2);
    }
    
    /**
     * 建表
     */
    @Override
    public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
        try {
            TableUtils.createTable(connectionSource, User.class);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 更新表
     */
    @Override
    public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion,
            int newVersion) {
        try {
            TableUtils.dropTable(connectionSource, User.class, true);
            onCreate(database, connectionSource);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 单例获取该Helper
     * @param context
     * @return
     */
    public static synchronized DatabaseHelper getHelper(Context context){
        if(instance==null){
            synchronized(DatabaseHelper.class){
                if(instance==null){
                    instance=new DatabaseHelper(context);
                }
            }
        }
        return instance;
    }
    
    /**
     * 获得userDao
     * 我们会有很多表,每个表一般我们都会单独写个Dao用于操作,这里为了简单我并没有抽取出来,直接写在helper中,比如UserDao的获取
     * @return
     * @throws SQLException
     */
    public Dao<User,Integer> getUserDao() throws SQLException{
        if(userDao==null){
            userDao=getDao(User.class);
        }
        return userDao;
    }
    
    /**
     * 释放资源
     */
    @Override
    public void close() {
        super.close();
        userDao=null;
    }
}

4.测试

关于单元测试的配置可参考Android Junit测试框架

package com.example.ormlite.test;

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

import android.test.AndroidTestCase;
import android.util.Log;

import com.example.ormlite.bean.User;
import com.example.ormlite.dao.UserDao;
import com.example.ormlite.db.DatabaseHelper;

public class OrmLiteDbTest extends AndroidTestCase{
    public void testAddUser(){
//        User u1=new User("yanqiong", "developer");
//        DatabaseHelper helper=DatabaseHelper.getHelper(getContext());
//        try {
//            helper.getUserDao().create(u1);
//            u1=new User("yanqiong2", "developer");
//            helper.getUserDao().create(u1);
//            u1=new User("yanqiong3", "developer");
//            helper.getUserDao().create(u1);
//            u1=new User("yanqiong4", "developer");
//            helper.getUserDao().create(u1);
//            
//            testList();
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }
        
        User u1=new User("yanqiong5", "developer");
        UserDao userDao=new UserDao(getContext());
        userDao.add(u1);
        
    }

    public void testList() {
        DatabaseHelper helper=DatabaseHelper.getHelper(getContext());
        User u1=new User("yanqiong-android", "developer");
        u1.setId(2);
        List<User> users;
        try {
            users = helper.getUserDao().queryForAll();
            Log.i("OrmLiteDbTest", users.toString());
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    public void testDeleteUser(){
        DatabaseHelper helper=DatabaseHelper.getHelper(getContext());
        try {
            helper.getUserDao().deleteById(2);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    public void testUpdateUser(){
        DatabaseHelper helper=DatabaseHelper.getHelper(getContext());
        User u1=new User("yanqiong-android", "developer");
        u1.setId(3);
        try {
            helper.getUserDao().update(u1);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

 规范的写法请参考Android 数据库框架OrmLite的使用(二)

转载于:https://www.cnblogs.com/Joanna-Yan/p/4942707.html

相关文章:

  • nyoj--1233--差值(贪心模拟+大数)
  • “滑机约拍”--第二阶段冲刺(2)
  • android学习SeekBar的使用
  • 2010年走到转折点的IT人:他们被迫改变
  • 如何消除inline-block元素间间距问题(转)
  • 经典算法研究系列:一、A*搜索算法
  • 基于Objectvie-C基础教程(第2版)做的笔记
  • S3C2440-LCD图片显示
  • 1203有穷自动机
  • eclipse 导入tomcat7源码
  • 硬件黑客
  • Python生成器实现杨辉三角打印
  • jQuery获取表格第一列的值
  • linux 安装mysql
  • 100个vc小项目开发:二、一步一点设计音乐播放器 [I]
  • [译]CSS 居中(Center)方法大合集
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【笔记】你不知道的JS读书笔记——Promise
  • Android单元测试 - 几个重要问题
  • Fundebug计费标准解释:事件数是如何定义的?
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Lsb图片隐写
  • MD5加密原理解析及OC版原理实现
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • MySQL-事务管理(基础)
  • Python爬虫--- 1.3 BS4库的解析器
  • tab.js分享及浏览器兼容性问题汇总
  • vue-cli3搭建项目
  • 成为一名优秀的Developer的书单
  • 简单基于spring的redis配置(单机和集群模式)
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 目录与文件属性:编写ls
  • 前嗅ForeSpider教程:创建模板
  • 微服务入门【系列视频课程】
  • 原生JS动态加载JS、CSS文件及代码脚本
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • (30)数组元素和与数字和的绝对差
  • (33)STM32——485实验笔记
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • .Net - 类的介绍
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET Core引入性能分析引导优化
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET成年了,然后呢?
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @Autowired和@Resource装配
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [BT]BUUCTF刷题第8天(3.26)
  • [cocos creator]EditBox,editing-return事件,清空输入框