zoukankan      html  css  js  c++  java
  • 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);
        }
    
    }
  • 相关阅读:
    微信公众号开发之用户地理位置坐标转百度坐标
    PHP变量入门教程(1)基础
    【很变态】PHP类实例化对象竟然可以访问类的“静态(static)方法”!!!
    【转】记录PHP、MySQL在高并发场景下产生的一次事故
    PHP返回32位与16位的md5加密值
    PhpStorm 8.x/9.x 快捷键设置/个性化设置,如何多项目共存?如何更换主题?
    Linux设置Memcached开机启动
    【荐】MongoDB基本命令大全
    【荐】PHP操作MongoDB GridFS 存储文件,如图片文件
    Shell入门教程:流程控制(7)break和continue
  • 原文地址:https://www.cnblogs.com/chenkuang/p/8120482.html
Copyright © 2011-2022 走看看