总感觉用原始的SQLLiteHelper操作数据库有点麻烦,上网找了些android数据库orm框架,对比了一下,现在使用ormlite的人貌似挺多的,在网上找了ormlite官方文档,根据官方文档,今天写了个demo,主要是用户注册,用户信息查看以及删除,运行效果如图:以前也用过一个同样的orm框架Afinal,但是感觉Afinal没有ormlite之强大。

Ormlite官网:http://ormlite.com/ 开发文档下载(pdf)。 但是是英文文档哦,不要一看到是英文的就害怕了,其实里面单词比较简单,能够看得懂的,多看看英文文档还是挺有帮助的。

一:要使用ormlite很简单,只需要下载相应的两个jar包(目前最新的jar包ormlite-android-4.48.jar,ormlite-core-4.48.jar下载)并导入工程即可。

二:创建实体类

@DatabaseTable(tableName = "tb_user")
//如果没有特别指出tableName = "tb_user",那么默认情况将类名作为表名
//这里也可以使用注解@Entity,因为ORMLite既支持它自己的注解(@DatabaseTable和 @DatabaseField)也支持很多来自javax.persistence包中标准的注解。
//你可以使用来自javax.persistence包的更多的标准JPA注解。
public class User {//用户编号/*** id:这个字段是否为主键,默认为false* generatedId:字段是否自动增加。默认为false。* 注意:id和generatedId只能指明一个,否则会报错的*///可以用javax.persistence注解: @Id,@Column@DatabaseField(generatedId=true)private int userId;//用户名@DatabaseFieldprivate String userName;//密码@DatabaseFieldprivate String password;public User() {//必须提供无参构造函数,这样查询的时候可以返回查询出来的对象}public User( int userId,String userName, String password) {this.userId = userId;this.userName = userName;this.password = password;}public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

三:创建SQLLiteOpenHelper,在这里有两个比较重要的类OrmLiteSqliteOpenHelper(当你的应用被加载时创建和更新数据库以及为其他的类提供DAO类,必须实现onCreate(SQLiteDatabasesqliteDatabase, ConnectionSource

connectionSource) and onUpgrade(SQLiteDatabasedatabase, ConnectionSource

connectionSource, intoldVersion, int newVersion).这两个类),RuntimeExceptionDao(默认情况下,大多数的dao方法都会抛出SQLException,因为SQLException是大部分jdbc以及其他的sql调用时抛出的默认异常。但是在android平台上,尤其是,绝大部分的异常继承了RuntimeException,添加了一个RuntimeExceptionDao来封装所有在运行时因调用底层dao方法所抛出的运行时异常。)

public class DatabaseHelper extends OrmLiteSqliteOpenHelper{// 数据库名称  private static final String DATABASE_NAME = "helloAndroid.db"; // 数据库version  private static final int DATABASE_VERSION = 1;/*** 包含两个泛型:* 第一个泛型表DAO操作的类* 第二个表示操作类的主键类型*/private Dao<User, Integer> userDao = null;private RuntimeExceptionDao<User, Integer> simpleRuntimeDao = null;public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource) {try {Log.i(DatabaseHelper.class.getName(), "onCreate");TableUtils.createTable(connectionSource, User.class);} catch (SQLException e) {Log.e(DatabaseHelper.class.getName(), "Can't create database", e);throw new RuntimeException(e);}}/*** 插入一条数据*/public void insert(User user){RuntimeExceptionDao<User, Integer> dao = getSimpleDataDao();//通过实体对象创建在数据库中创建一条数据,成功返回1,说明插入了一条数据Log.i("test", "dao = " + dao+"  user= "+user);int returnValue = dao.create(user);Log.i("test", "插入数据后返回值:"+returnValue);}/*** 查询所有的用户信息* @return*/public List<User> findAllUser(){RuntimeExceptionDao<User, Integer> dao = getSimpleDataDao();return dao.queryForAll();}/*** 删除第一条用户信息*/public void deleteById(){RuntimeExceptionDao<User, Integer> dao = getSimpleDataDao();List<User> list = dao.queryForAll();//删除成功返回1(删除了一条数据)if(list.size()>0){int returnValue = dao.deleteById(list.get(0).getUserId());Log.i("test", "删除一条数据后返回值:"+returnValue);}}/*** 批量删除用户信息*/public void deleteByIds(){RuntimeExceptionDao<User, Integer> dao = getSimpleDataDao();List<User> list = dao.queryForAll();List<Integer> ids = new ArrayList<Integer>();if(list.size()>0){for(User u:list){ids.add(u.getUserId());}//返回删除的记录数int returnValue = dao.deleteIds(ids);Log.i("test", "批量删除后返回值:"+returnValue);}}public RuntimeExceptionDao<User, Integer> getSimpleDataDao() {if (simpleRuntimeDao == null) {simpleRuntimeDao = getRuntimeExceptionDao(User.class);}Log.i("test", "simpleRuntimeDao ======= "+simpleRuntimeDao);return simpleRuntimeDao;}/*** 这个方法在你的应用升级以及它有一个更高的版本号时调用。所以需要你调整各种数据来适应新的版本*/@Overridepublic void onUpgrade(SQLiteDatabase sqliteDatabase, ConnectionSource connectionSource, int oldVersion,int newVersion) {Log.i("test", "更新....");try {Log.i(DatabaseHelper.class.getName(), "onUpgrade");//删掉旧版本的数据TableUtils.dropTable(connectionSource, User.class, true);//创建一个新的版本onCreate(sqliteDatabase, connectionSource);} catch (SQLException e) {Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e);throw new RuntimeException(e);}}public Dao<User, Integer> getDao() throws SQLException {if (userDao == null) {userDao = getDao(User.class);}return userDao;}
}

四:接下来就是Activity了。

MainActivity:当程序运行便进入该类,主要是显示页面的那几个按钮以及显示查询出来的用户信息。

public class MainActivity extends Activity {Button button1;//注册按钮Button button2;//显示按钮Button button3;//删除按钮Button button4;//批量删除按钮TextView textView;//用来显示查询到的用户信息DatabaseHelper helper = new DatabaseHelper(this);@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);button1 = (Button)this.findViewById(R.id.main_btn_regist);button2 = (Button)this.findViewById(R.id.main_btn_show);button3 = (Button)this.findViewById(R.id.main_btn_delete);button4 = (Button)this.findViewById(R.id.main_btn_deleteAll);textView = (TextView)this.findViewById(R.id.main_show_user);//点击注册按钮跳转到注册页面button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setClass(MainActivity.this, RegistActivity.class);startActivity(intent);}});//点击“显示”按钮跳转到用户信息显示页面并将注册用户信息显示出来button2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {List<User> userList = helper.findAllUser();String str = "";if(userList.size()>0){//将查询到的用户信息显示出来for(User user:userList){str+="用户"+user.getUserId()+":"+user.getUserName()+"    密码:"+user.getPassword();}textView.setText(str);}else{textView.setText("亲!还没注册吧!");}}});//删除一条记录button3.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {helper.deleteById();}});//批量删除button4.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {helper.deleteByIds();}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

对应的布局文件:main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical"android:gravity="center"tools:context=".MainActivity" ><Button android:id="@+id/main_btn_regist"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="注册"/><Button android:id="@+id/main_btn_show"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="显示"/><Button android:id="@+id/main_btn_delete"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="删除"/><Button android:id="@+id/main_btn_deleteAll"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="批量删除"/><TextView android:id="@+id/main_show_user"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>

RegistActivity:用户注册类

/*** 用户注册* @author leox**/
public class RegistActivity  extends Activity {EditText userNameEdit;//用户名编辑框EditText passwordEdit;//密码编辑框Button reButton;//注册按钮DatabaseHelper helper = new DatabaseHelper(this);@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);userNameEdit = (EditText)this.findViewById(R.id.et_username);passwordEdit = (EditText)this.findViewById(R.id.et_password);reButton = (Button)this.findViewById(R.id.btn_regist);reButton.setOnClickListener(new myClickListener());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}class myClickListener implements OnClickListener{@Overridepublic void onClick(View v) {//用户名String userName = userNameEdit.getText().toString();//密码String password = passwordEdit.getText().toString();User user = new User();user.setUserName(userName);user.setPassword(password);//插入注册用户信息helper.insert(user);Intent intent = new Intent();intent.setClass(RegistActivity.this, MainActivity.class);startActivity(intent);}}
}

对应的布局文件:activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical"android:gravity="center"tools:context=".RegistActivity" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="20dp"android:text="用户注册" /><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="horizontal"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="用户名:"/><EditTextandroid:id="@+id/et_username"android:layout_width="200px"android:layout_height="wrap_content" /></LinearLayout><LinearLayout android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="horizontal"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="密码:"/><EditTextandroid:id="@+id/et_password"android:layout_width="200px"android:layout_height="wrap_content"android:password="true"/></LinearLayout><Button android:id="@+id/btn_regist"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="注册"/></LinearLayout>

android对象关系映射框架ormlite学习之单表操作相关推荐

  1. android对象关系映射框架ormlite之一对多(OneToMany)

    前两天,用ormlite对单张表进行了基本的操作,但是,我们知道通常情况对于单张表格进行操作在实际情况中很前两天不现实,那么ormlite能否像Hibenate那样实现多张表之间的一对多,多对多(即O ...

  2. 学习笔记之什么是持久化和对象关系映射ORM技术

    ----------------本文转自:http://www.cppblog.com/javenstudio/articles/541.html--------------------- 何谓&qu ...

  3. Hibernate对象关系映射详解之一对多关系映射

    Hibernate对象关系映射详解之"一对多"关系映射 之前学习Hibernate框架的时候,对这七大关系映射一直是云里雾里的,虽然可以仿照写出代码,但是不能独立编写出来.鉴于工作 ...

  4. 对象关系映射(ORM)介绍理解

    问题背景 假设,让你设计一个框架,把jdbc封装一下?? JDBC操作步骤: 获取数据库连接Connection 创建操作命令对象Statement 执行sql语句(sql中,如果有占位符,在执行sq ...

  5. netsuite 数据集成_Java中带有NetSuite数据实体的对象关系映射(ORM)

    netsuite 数据集成 对象关系映射(ORM)技术使使用关系数据源更加容易,并且可以将逻辑业务模型与物理存储模型联系在一起. 遵循本教程,将NetSuite数据的连接集成到基于Java的ORM框架 ...

  6. Java中带有NetSuite数据实体的对象关系映射(ORM)

    对象关系映射(ORM)技术使使用关系数据源更容易,并且可以将逻辑业务模型与物理存储模型联系在一起. 遵循本教程,将与NetSuite数据的连接集成到基于Java的ORM框架Hibernate中. 您可 ...

  7. 【分享】关于对象关系映射的理解

    对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...

  8. C++ 对象关系映射(ORM)介绍

    用过Java的都知道SSH框架,特别对于数据库开发,Java领域有无数的ORM框架,供数据持久层调用,如Hibernate,iBatis(现在改名叫MyBatis),TopLink,JDO,JPA-- ...

  9. ORM(Object Relational Mapping,对象/关系映射)

    ORM(Object Relational Mapping,对象/关系映射) 在考虑O/R Mapping的时候,有两个概念是经常会接触的,那就是VO和PO. 所谓的VO,就是Value Object ...

最新文章

  1. Python3编写网络爬虫04-爬取猫眼电影排行实例
  2. macOS下编译PgBouncer
  3. MySQL的事务与事务隔离
  4. 电子设计常用总线--QSPI
  5. Python的正则表达式笔记
  6. PAT1069. The Black Hole of Numbers
  7. 服务器如何用显示器更改ip,ip地址怎么改
  8. 一个拖拽的效果类和dom-drag.js
  9. 用vue写一个仿简书的轮播图
  10. uplift 模型开源包(causalml)尝试
  11. java实现飞机大战小游戏(源码+注释)
  12. SIP账号注册的SIP软电话的使用和常见问题
  13. python 线性插值处理_python线性插值解析
  14. VS2013 配置wincap开发环境
  15. 2.PyTorch的Dataset和DataLoader
  16. android 微信架构,微信App支付技术架构全解析
  17. 微信小程序引入外部矢量图标(阿里巴巴矢量图标)
  18. 监视注册表变化 - Registry Auditing
  19. 图像几何校正-- -- -- 投影变换
  20. OPENDATASOURCE 打开excel、access、qsl

热门文章

  1. vue中引用swiper轮播插件
  2. Lua-pb 升级到Lua5.3
  3. WEB前端常用JavaScript代码知识点
  4. Unity3D中的线性插值Lerp()函数解析
  5. 【Unity】第5章 3D坐标系和天空盒
  6. 配置centos防火墙(iptables)开放80端口
  7. Android签名机制:生成keystore、签名、查看签名信息
  8. 用户配置文件同步服务,显示为正在启动解决办法
  9. 图片横向滚动,两边有按钮控制
  10. post 下载文件 (excel)