Android ORMLite框架入门用法教程

2024-02-29 00:08

本文主要是介绍Android ORMLite框架入门用法教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app;本篇博客将详细介绍ORMLite的简易入门用法。

下面开始介绍ORMLite的入门用法~


1、下载 ORMLite Jar


首先去ORMLite官网下载jar包,对于Android为:ormlite-android-4.48.jar 和 ormlite-core-4.48.jar ;

ps:访问不了的朋友,文章末尾会把jar、源码、doc与本篇博客例子一起打包提供给大家下载。


2、基本项目实例结构图


1)、bean包下为实体类,也就是每个实体类对应一张数据库表,如本实例的User.java类对应数据库的tb_user表,也就是说你有几张表你就要对应有几个实体类。


2)、db包下为DatabaseHelper.java类,这个类是继承于ORMLITE框架里面的OrmLiteSqliteOpenHelper类的,然后在里面实现一些必要的方法,外部在用这个继承类来操作数据库


3)、test包下为测试用例类,用来测试我们写的是否可以运行


总体流程大概这样:下载ormlite的加包,加入到你的项目工程里面去,然后你的项目需要几张表就对应的建立几个实体类,实体类的字段要跟数据库表里面的字段是一致的,然后自定义一个类去继承ORMLITE框架里面的OrmLiteSqliteOpenHelper类,复写里面的onCreate、onUpgrade方法等,然后外部在用这个类去实现对数据库的操作即可。


详情看下面代码:


User.java:


package com.example.ormlitedemo.bean;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
/*** 注解* @author Jerry*tableName="tb_user"表示对应的数据库表叫:tb_user表*/
@DatabaseTable(tableName="tb_user")
public class User {//generatedId=true:表示是主键@DatabaseField(generatedId=true)private int id;//columnName="name":表示对应数据库表tb_user表里面的name字段@DatabaseField(columnName="name")private String name;//columnName="name":表示对应数据库表tb_user表里面的age字段@DatabaseField(columnName="age")private int age;//columnName="name":表示对应数据库表tb_user表里面的sex字段@DatabaseField(columnName="sex")private String sex;public User(){}public User( String name, int age, String sex) {//super();this.name = name;this.age = age;this.sex = sex;}public User(int id, String name, int age, String sex) {//super();this.id = id;this.name = name;this.age = age;this.sex = sex;}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;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Override
public String toString() {return "ID:"+id+"\tNAME:"+name+"\tAGE:"+age+"\tSEX:"+sex;
}
}


DatabaseHelper.java:


package com.example.ormlitedemo.db;import java.sql.SQLException;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.example.ormlitedemo.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;public class DatabaseHelper extends OrmLiteSqliteOpenHelper {// 数据库名字private static final String TABLE_NAME = "ormlite-test.db";// 表的Dao,每一张表对应一个Daoprivate Dao<User, Integer> userDao;// 构造函数,私有的外部不能直接访问private DatabaseHelper(Context context) {super(context, TABLE_NAME, null, 1);}@Overridepublic void onCreate(SQLiteDatabase database,ConnectionSource connectionSource) {try {// 通过TableUtils这个类新建User类对应的表TableUtils.createTable(connectionSource, User.class);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic 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();}}// DatabaseHelper实例private static DatabaseHelper instance;/*** 单例模式获取实例* * @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* * @return* @throws SQLException*/public Dao<User, Integer> getUserDao() throws SQLException {if (userDao == null) {userDao = getDao(User.class);}return userDao;}/*** 释放*/@Overridepublic void close() {super.close();userDao = null;}
}

OrmLiteDbTest.java


package com.example.ormlitedemo.test;import java.sql.SQLException;
import java.util.List;
import com.example.ormlitedemo.bean.User;
import com.example.ormlitedemo.db.DatabaseHelper;import android.test.AndroidTestCase;
/*** 测试* @author Jerry**/
public class OrmLiteDbTest extends AndroidTestCase 
{/*** 增*/public void addUserTest(){DatabaseHelper helper = DatabaseHelper.getHelper(getContext());try {User u1=new User("stb", 22, "男");helper.getUserDao().create(u1);User u2=new User("stb2", 23, "男");helper.getUserDao().create(u2);User u3=new User("stb3", 24, "男");helper.getUserDao().create(u3);} catch (SQLException e) {e.printStackTrace();}}/*** 删*/public void delUserTest(){DatabaseHelper helper=DatabaseHelper.getHelper(getContext());try {helper.getUserDao().deleteById(1);} catch (SQLException e) {e.printStackTrace();}}/*** 改*/public void updateUserTest(){DatabaseHelper helper=DatabaseHelper.getHelper(getContext());User u=new User("我爱你", 25, "女");u.setId(1);try {helper.getUserDao().update(u);} catch (SQLException e) {e.printStackTrace();}}/*** 查*/public void queryUserTest(){DatabaseHelper helper=DatabaseHelper.getHelper(getContext());List<User> list=null;try {list = helper.getUserDao().queryForAll();} catch (SQLException e) {e.printStackTrace();}if(list!=null){for(int i=0;i<list.size();i++){System.out.println(list.get(i).toString());}}}
}

AndroidManifest.xml


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.ormlitedemo"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="19" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><uses-library android:name="android.test.runner" />  <activityandroid:name="com.example.ormlitedemo.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application><!-- 记住这个一要放在application外面,不然会出现配置错误 信息 -->  <instrumentation android:name="android.test.InstrumentationTestRunner"  android:targetPackage="com.example.ormlitedemo" android:label="Tests for My App" />  
</manifest>


注意:用AndroidTestCase测试记得要配置以下两个:


   <uses-library android:name="android.test.runner" />  


 <instrumentation android:name="android.test.InstrumentationTestRunner"  
        android:targetPackage="com.example.ormlitedemo" android:label="Tests for My App" />  

ps:User.java里面的空的构造方法记得要写不然会报错。


测试效果:

     增加后查询结果:


     修改后查询结果:


     删除后查询结果:



项目源代码下载地址:

http://download.csdn.net/detail/su_tianbiao/8520113

这篇关于Android ORMLite框架入门用法教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757052

相关文章

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

Mysql中isnull,ifnull,nullif的用法及语义详解

《Mysql中isnull,ifnull,nullif的用法及语义详解》MySQL中ISNULL判断表达式是否为NULL,IFNULL替换NULL值为指定值,NULLIF在表达式相等时返回NULL,用... 目录mysql中isnull,ifnull,nullif的用法1. ISNULL(expr) → 判

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.