因为这个项目的业务层很薄,因此想在架构上尽量保持着「轻」,不会把创建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. tensorflow---darknet53

    #! /usr/bin/env python# coding=utf-8#=============================================================== ...

  2. torch文档学习笔记

    下面为官方文档学习笔记    http://pytorch.org/docs/0.3.0/index.html 1.torch.Tensor from __future__ import print_ ...

  3. Java 语言特性【一】——JUC(Java 并发工具包)

    引言 JUC即java.util.concurrent,是java提供的用于多线程处理的工具类库.重点关注 ConcurrentXXX.AtomicXXX.Executor.Caller&&a ...

  4. c++ 深度优先算法

    #include <iostream> using namespace std; #define VertexNum 9 /*定义顶点数*/ struct Node /*声明图形顶点结构* ...

  5. selenium登陆qq邮箱页面

    from selenium import webdriver driver = webdriver.Chrome() driver.get('https://mail.qq.com/cgi-bin/l ...

  6. 关于PHP索引数组unset某key后json_encode相关问题踩坑记录

    <?php $a = [1,2,3]; var_dump(json_encode($a)); #string(7) "[1,2,3]" unset($a[0]); var_d ...

  7. 使用GitHub+Hexo搭建个人博客

    title: CozyMo date: 2019-12-28 16:01:29 tags: 书写 前言:搭建博客要自己打代码吗? 开始动手:搭建博客的步骤 个性化:更换主题!! 写博客:初识 mark ...

  8. 2019.11.18CTFD搭建记录

    ### 0x01 实验室纳新,准备在自己服务器搭建个ctfd给新生们玩玩,忙活了一天orz[大一刚开学就搭建过没这么费力啊..] 现在大二了没想到能折腾一天... 直接说下我踩的坑吧,给后来的人们说说 ...

  9. JavaScript—面向对象 贪吃蛇_3 蛇对象

    蛇对象 function Snake(element) { this.width = 20 this.height = 20 //蛇身 位置 颜色 this.body = [ {x: 6, y: 4, ...

  10. WAMP常用环境配置

    自定义网站目录 修改目录位置 如下图,打开httpd.conf文件. 查找DocumentRoot(两处),做如下修改: #demo为自定义网站目录,下面不再说明 DocumentRoot " ...