因为这个项目的业务层很薄,因此想在架构上尽量保持着「轻」,不会把创建DbHelper的interface。

而是直接用DAO创建DbHelper对象。

DAO和DbHelper也是同样使用懒汉模式。

1. UserDAO懒汉模式。

public class UserDAO {

    private Configuration config = new Configuration();
protected SQLiteDatabase db;
private DbHelper dbHelper; public UserDAO(Context context) {
this.dbHelper = DbHelper.getInstance(context);
this.db = this.dbHelper.getWritableDatabase();
} }

2. DAO负责处理Query SQlite的业务。这里分别有6个方法。

1. boolean setUser()
2. UserDTO getUser()
3. int getUserCount()
4. boolean setUserPortrait(Bitmap)
5. Bitmap getUserPortrait()
6. byte[] getUserPortraitBYTE()

3. 完整的DAO代码如下。

package com.paradise.electronic.eparadise2.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import com.paradise.electronic.eparadise2.dto.UserDTO;
import com.paradise.electronic.eparadise2.sqlite.DbHelper;
import com.paradise.electronic.eparadise2.util.Configuration; import java.io.ByteArrayOutputStream; /**
* Created by Administrator on 17-11-17.
*/
public class UserDAO { private Configuration config = new Configuration();
protected SQLiteDatabase db;
private DbHelper dbHelper; public UserDAO(Context context) {
this.dbHelper = DbHelper.getInstance(context);
this.db = this.dbHelper.getWritableDatabase();
} /*
* @return 1: Successful 0: Failed
*/
public boolean setUser (UserDTO user) {
ContentValues values = new ContentValues();
boolean result = true; values.put(config.USER_USERID, user.getId());
values.put(config.USER_NAME, user.getName());
values.put(config.USER_PASSWORD, user.getPassword());
values.put(config.USER_EMAIL, user.getEmail());
values.put(config.USER_DESCRIPTION, user.getDescription());
values.put(config.USER_TEAM, user.getTeam());
values.put(config.USER_ACADEMIC, user.getAcademic());
values.put(config.USER_PORTRAIT, user.getPortrait());
values.put(config.USER_REGISTER_DATE, user.getRegisterDate()); try {
db.insert(config.DB_USER, null, values);
} catch (SQLException e) {
result = false;
}
return result;
} /*
* @return UserDTO
*/
public UserDTO getUser() {
String query = " SELECT "+config.USER_USERID+
", "+config.USER_NAME+
", "+config.USER_PASSWORD+
", "+config.USER_EMAIL+
", "+config.USER_DESCRIPTION+
", "+config.USER_TEAM+
", "+config.USER_ACADEMIC+
", "+config.USER_PORTRAIT+
", "+config.USER_REGISTER_DATE+
" FROM "+config.DB_USER+
" ORDER BY "+config.USER_ID+" DESC LIMIT 1 ";
Cursor cursor = db.rawQuery(query, null); if (cursor != null) {
cursor.moveToFirst();
} UserDTO user = new UserDTO(cursor.getInt(0), cursor.getString(1), cursor.getString(2),
cursor.getString(3), cursor.getString(4), cursor.getString(5), cursor.getString(6), cursor.getString(7),
cursor.getString(8));
return user;
} public void updateUser() { } public void deleteUser() { } public int getUserCount() {
String query = " SELECT * FROM "+config.DB_USER;
Cursor cursor = db.rawQuery(query, null);
int count = cursor.getCount();
return count;
} /*
* @param [Bitmap]portrait
* @return 1: Successful 0: Failed
*/
public boolean setUserPortrait(Bitmap portrait) {
ContentValues values = new ContentValues();
boolean result = true; ByteArrayOutputStream stream = new ByteArrayOutputStream();
portrait.compress(Bitmap.CompressFormat.JPEG, 0, stream); values.put(config.USER_PORTRAIT_DATA, stream.toByteArray());
try {
db.insert(config.DB_USER, null, values);
} catch (SQLException e) {
result = false;
}
return result;
} /*
* @return [Bitmap]portrait
*/
public Bitmap getUserPortrait() {
String query = " SELECT "+config.USER_USERID+
", "+config.USER_PORTRAIT_DATA+
" FROM "+config.DB_USER+
" ORDER BY "+config.USER_ID+" DESC LIMIT 1 ";
Cursor cursor = db.rawQuery(query, null);
if (cursor != null) {
cursor.moveToFirst();
} byte[] bytePortrait = cursor.getBlob(0);
Bitmap portrait = BitmapFactory.decodeByteArray(bytePortrait, 0, bytePortrait.length);
return portrait;
} /*
* @reyurn [byte]protrait
*/
public byte[] getUserPortraitBYTE() {
String query = " SELECT "+config.USER_USERID+
", "+config.USER_PORTRAIT_DATA+
" FROM "+config.DB_USER+
" ORDER BY "+config.USER_ID+" DESC LIMIT 1 ";
Cursor cursor = db.rawQuery(query, null);
if (cursor != null) {
cursor.moveToFirst();
} return cursor.getBlob(0);
} }

Sqlite教程(2) Data Access Object的更多相关文章

  1. 黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block 企业库数据库访问模块通过抽象工厂模式,允许用户 ...

  2. csharp: Procedure with DAO(Data Access Object) and DAL(Data Access Layer)

    sql script code: CREATE TABLE DuCardType ( CardTypeId INT IDENTITY(1,1) PRIMARY KEY, CardTypeName NV ...

  3. Sqlite教程(4) Activity

    之前我们已经有了DbHelper.Data Access Object.Configuration. 那麽现在就是由Activity去创建它们,然後就可以存取Sqlite. 架构图表示了它们的关系. ...

  4. 问题-Error creating object. Please verify that the Microsoft Data Access Components 2.1(or later) have been properly installed.

    问题现象:软件在启动时报如下错误信息:Exception Exception in module zhujiangguanjia.exe at 001da37f. Error creating obj ...

  5. FunDA(0)- Functional Data Access accessible to all

    大数据.多核CPU驱动了函数式编程模式的兴起.因为函数式编程更适合多线程.复杂.安全的大型软件编程.但是,对许多有应用软件开发经验的编程者来说,函数式编程模式是一种全新的.甚至抽象的概念,可能需要很长 ...

  6. [翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)

    Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 ...

  7. Data transfer object

    Data transfer object (DTO) is a design pattern used to transfer data between software application su ...

  8. Apache Cloudstack Development 101 -- Data Access Layer

    刚接触CloudStack,也是第一次翻译英文文档,限于水平有限,不当之处欢迎拍砖! 原文地址:https://cwiki.apache.org/confluence/display/CloudSta ...

  9. Xamarin SQLite教程Xamarin.iOS项目添加引用

    Xamarin SQLite教程Xamarin.iOS项目添加引用 使用直接方式访问SQLite数据库,需要将System.Data和Mono.Data.SQlite库导入到创建的项目中.下面将分别讲 ...

随机推荐

  1. SASS- 局部文件(Partial)

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – 语法 SASS – 变量 SASS- 局部文件(Partial) SASS – 混合(Mixin) SASS ...

  2. 51nod 1080:两个数的平方和

    1080 两个数的平方和 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果 ...

  3. Python中的常用内置对象之map对象

    如果你了解云计算的最重要的计算框架Mapreduce,你就对Python提供的map和reduce对象有很好的理解,在大数据面前,单机计算愈加力不从心,分布式计算也就是后来的云计算的框架担当大任,它提 ...

  4. FZU_1683 矩阵快速幂 求和

    这个题目确实是很简单的一个矩阵快速幂,但是我在求和的时候,用的是标准的求和,即,一共计算logN次Ak,但是这样会超时. 后来就发现原来本身和Sn=Sn-1+Fn:即Sn本身可以写在矩阵当中,所以直接 ...

  5. 题解 P1317 【低洼地】

    题目 这题挺简单的,没必要用数组 [分析] 需要判断的是低洼地的数量 通过对题目中图进行分析,显然可以发现低洼地的定义: 若数组中存在一个数值相同的连续区间,这个区间端点外相邻两点的数值都大于该区间的 ...

  6. mysql的常见面试问题

    1.如何登陆mysql数据库 MySQL -u username -p 2.如何开启/关闭mysql服务 service mysql start/stop 3.查看mysql的状态 service m ...

  7. 18个Java8日期处理的实践,太有用了

    专注于Java领域优质技术,欢迎关注 作者:胖先森 Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实例来学习如何使用新API. Java处理日期.日历和时间的方式一直为社区所诟 ...

  8. keras_yolo3阅读

    源码地址 https://github.com/qqwweee/keras-yolo3 春节期间仔细看了看yolov3的kears源码,这个源码毕竟不是作者写的,有点寒酸,可能大道至简也是这么个理.我 ...

  9. 1. laravel 学习 环境搭建

    1. 项目环境 vagrant + laradock  (因为 自己手动搭建环境太麻烦了 自己弄了一下 感觉还是有些漏洞 所以采用 laradock) 2. Vagrantfile 备注 : box  ...

  10. h5-立方体

    1.制作一个立方体:首先要有6个面 <div class="box"> <div class="front">front</div ...