Sqlite教程(2) Data Access Object
因为这个项目的业务层很薄,因此想在架构上尽量保持着「轻」,不会把创建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的更多相关文章
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block
原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block 企业库数据库访问模块通过抽象工厂模式,允许用户 ...
- 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 ...
- Sqlite教程(4) Activity
之前我们已经有了DbHelper.Data Access Object.Configuration. 那麽现在就是由Activity去创建它们,然後就可以存取Sqlite. 架构图表示了它们的关系. ...
- 问题-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 ...
- FunDA(0)- Functional Data Access accessible to all
大数据.多核CPU驱动了函数式编程模式的兴起.因为函数式编程更适合多线程.复杂.安全的大型软件编程.但是,对许多有应用软件开发经验的编程者来说,函数式编程模式是一种全新的.甚至抽象的概念,可能需要很长 ...
- [翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)
Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 ...
- Data transfer object
Data transfer object (DTO) is a design pattern used to transfer data between software application su ...
- Apache Cloudstack Development 101 -- Data Access Layer
刚接触CloudStack,也是第一次翻译英文文档,限于水平有限,不当之处欢迎拍砖! 原文地址:https://cwiki.apache.org/confluence/display/CloudSta ...
- Xamarin SQLite教程Xamarin.iOS项目添加引用
Xamarin SQLite教程Xamarin.iOS项目添加引用 使用直接方式访问SQLite数据库,需要将System.Data和Mono.Data.SQlite库导入到创建的项目中.下面将分别讲 ...
随机推荐
- tensorflow---darknet53
#! /usr/bin/env python# coding=utf-8#=============================================================== ...
- torch文档学习笔记
下面为官方文档学习笔记 http://pytorch.org/docs/0.3.0/index.html 1.torch.Tensor from __future__ import print_ ...
- Java 语言特性【一】——JUC(Java 并发工具包)
引言 JUC即java.util.concurrent,是java提供的用于多线程处理的工具类库.重点关注 ConcurrentXXX.AtomicXXX.Executor.Caller&&a ...
- c++ 深度优先算法
#include <iostream> using namespace std; #define VertexNum 9 /*定义顶点数*/ struct Node /*声明图形顶点结构* ...
- selenium登陆qq邮箱页面
from selenium import webdriver driver = webdriver.Chrome() driver.get('https://mail.qq.com/cgi-bin/l ...
- 关于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 ...
- 使用GitHub+Hexo搭建个人博客
title: CozyMo date: 2019-12-28 16:01:29 tags: 书写 前言:搭建博客要自己打代码吗? 开始动手:搭建博客的步骤 个性化:更换主题!! 写博客:初识 mark ...
- 2019.11.18CTFD搭建记录
### 0x01 实验室纳新,准备在自己服务器搭建个ctfd给新生们玩玩,忙活了一天orz[大一刚开学就搭建过没这么费力啊..] 现在大二了没想到能折腾一天... 直接说下我踩的坑吧,给后来的人们说说 ...
- JavaScript—面向对象 贪吃蛇_3 蛇对象
蛇对象 function Snake(element) { this.width = 20 this.height = 20 //蛇身 位置 颜色 this.body = [ {x: 6, y: 4, ...
- WAMP常用环境配置
自定义网站目录 修改目录位置 如下图,打开httpd.conf文件. 查找DocumentRoot(两处),做如下修改: #demo为自定义网站目录,下面不再说明 DocumentRoot " ...