安卓实习第十天

- SQLite的Dao层编写及调用

SJBDatabaseHelper.java

package com.shijiebang.offlinemap.db.SJBDao;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by zhangkaiyue on 15/7/27.
 */
public class SJBDatabaseHelper extends SQLiteOpenHelper {

    private static final int VERSION = 1;
    private static final String DBNAME = "search_history.db";
    private static final String CRAETE_SEARCH_HISTORY = "create table search_history ("
            + "id integer primary key autoincrement,"
            + "search text)";

    //自带的构造方法
    public SJBDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory,
                             int version) {
        super(context, name, factory, version);
    }


    public SJBDatabaseHelper(Context context) {
        this(context, DBNAME, null, VERSION);
    }

    //版本变更时
    public SJBDatabaseHelper(Context context,int version) {
        this(context,DBNAME,null,version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CRAETE_SEARCH_HISTORY);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists search_history");
        onCreate(db);
    }


}

SJBSearchHistoryDao.java

package com.shijiebang.offlinemap.db.SJBDao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by zhangkaiyue on 15/7/28.
 */
public class SJBSearchHistoryDao {

    private SJBDatabaseHelper helper;
    private SQLiteDatabase db;

    public SJBSearchHistoryDao(Context context) {
        helper = new SJBDatabaseHelper(context);
    }

    /**
     * 当Activity中调用此构造方法,传入一个版本号时,系统会在下一次调用数据库时调用Helper中的onUpgrade()方法进行更新
     * @param context
     * @param version
     */
    public SJBSearchHistoryDao(Context context, int version) {
        helper = new SJBDatabaseHelper(context, version);
    }


    public void insert(String str){
        db = helper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("search", str);
        db.insert("search_history", null, values);
        values.clear();
        db.close();
    }

    public List<Map<String,Object>> query(){
        List<Map<String,Object>> list = new ArrayList<Map<String, Object>>();
        Map<String,Object> map;
        db = helper.getWritableDatabase();
        Cursor cursor = db.query("search_history", null, null,null,null,null,"id desc" );
        if(cursor.moveToFirst()){
            do{
                String search = cursor.getString(cursor.getColumnIndex("search"));
                map = new HashMap<String, Object>();
                map.put("search",search);
                list.add(map);
            }while (cursor.moveToNext());
        }
        cursor.close();
        db.close();
        return list;
    }

    public void delete(String str){
        db = helper.getWritableDatabase();
        db.execSQL("delete from search_history where search = '" + str + "'");
        db.close();
    }

    public void deleteAll(){
        db = helper.getWritableDatabase();
        db.execSQL("delete from search_history");
        db.close();
    }

}

调用

String searchContent = etSearch.getText().toString();
SJBSearchHistoryDao dao = new SJBSearchHistoryDao(getApplicationContext());
dao.insert(searchContent);

- 单例模式

单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个

单例模式的定义
单例模式保证一个类仅有一个实例,同时这个类还必须提供一个访问该类的全局访问点

Singleton 类

namespace Singleton 
{ 
    public class Singleton 
    { 
        //定义一个私有的静态全局变量来保存该类的唯一实例 
        private static Singleton singleton;

        /// <summary> 
        /// 构造函数必须是私有的 
        /// 这样在外部便无法使用 new 来创建该类的实例 
        /// </summary> 
        private Singleton() 
        { 
        }

       /// <summary> 
        /// 定义一个全局访问点 
        /// 设置为静态方法 
        /// 则在类的外部便无需实例化就可以调用该方法 
        /// </summary> 
        /// <returns></returns> 
        public static Singleton GetInstance() 
        { 
            //这里可以保证只实例化一次 
            //即在第一次调用时实例化 
            //以后调用便不会再实例化 
            if (singleton == null) 
            { 
                singleton = new Singleton(); 
            } 
            return singleton; 
        } 
    } 
}

客户端代码

using System;

namespace SingletonTest 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            Singleton.Singleton singletonOne = 
                Singleton.Singleton.GetInstance(); 
            Singleton.Singleton singletonTwo = 
                Singleton.Singleton.GetInstance();

            if (singletonOne.Equals(singletonTwo)) 
            { 
                Console.WriteLine("singletonOne 和 singletonTwo 代表的是同一个实例"); 
            } 
            else 
            { 
                Console.WriteLine("singletonOne 和 singletonTwo 代表的是不同一个实例"); 
            }

            Console.ReadKey(); 
        } 
    } 
}

单例模式的特点:

首先,单例模式使类在程序生命周期的任何时刻都只有一个实例,

然后,单例的构造函数是私有的,外部程序如果想要访问这个单例类的话,

必须通过 GetInstance()来请求(注意是请求)得到这个单例类的实例。

详见http://www.cnblogs.com/BoyXiao/archive/2010/05/07/1729376.html?login=1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值