数据库操作 简单汇总

操作封装类

SQLiteDataBaseHelper.java

package com.wyj.db;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment;
import android.util.Log;
//OPEN_READONLY :代表的是以只读方式打开数据库(常量值为:1)
//OPEN_READWRITE:代表以读写方式打开数据库(常量值为:0)
//CREATE_IF_NECESSARY:当数据库不存在时创建数据库
//NO_LOCALIZED_COLLATORS:打开数据库时,不根据本地化语言对数据库进行排序(常量值为:16)
//mDatabaseHelper.getWritableDatabase();不推荐作用,如果磁盘满了还是会继续写入会产生异常
//用到的权限
//向sdcard写入权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//在sdcard中创建与删除文件的权限<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
//注意数据库的可写权限!!!
//linux下的权限
//-rwx------: 文件所有者对文件具有读取、写入和执行的权限。
//-rwxr-—r--: 文件所有者具有读、写与执行的权限,其他用户则具有读取的权限。
//-rw-rw-r-x: 文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。
//drwx--x--x: 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。
//Drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。
//r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目 录的权限。
//w(Write,写入):对文件而言,具有新增、修改文件内容的权限;对目录来说,具有删除、移动目录内文件的权限。
//x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
//如果关闭执行权限,则表示字符会变成大写:
//-rwSr-Sr-T 1 root root 4096 6月 23 08:17 conf
//注意表名和库名的不同
//SQLiteDatabase有自带的insert、update、delete、query四个方法虽然方法,但不利于熟SQL语句。因为不封装

/**
 * 自己封装的数据库操作类
 * 
 * @author 仲丛旭
 * 
 */
public class SQLiteDataBaseHelper {
    /** 日志打印 */
    private static final String TAG = "SQLiteDataBaseHelper";
    /** 用于管理和操作SQLite数据库 */
    private SQLiteDatabase database = null;
    /** 由SQLiteOpenHelper继承过来,用于实现数据库的建立与更新 */
    private MySQLiteOpen mySQLiteOpen = null;
    // ================================
    /** SD卡的根目录 */
    private final String SDCARD_ROOT = Environment
            .getExternalStorageDirectory().getAbsolutePath();
    /** 打开默认数据库路径 */
    private final String PATH = SDCARD_ROOT + File.separator + "cms_db"
            + File.separator + "cms.db";
    // ==============================
    /** 要创建的数据库名字 */
    private static final String DB_NAME = "wyj.db";
    /** 数据库版本 */
    private static final int VERSION = 1;
    /** 创建表名 */
     private static final String SQL_CREATE_TABLE2 =
     "CREATE TABLE tb_words(_id INTEGER PRIMARY KEY AUTOINCREMENT , english , chinese)";
    private static final String SQL_CREATE_TABLE = "CREATE TABLE member_birthday(_id  integer primary key autoincrement not null, mid varchar, title varchar, birthday_time varchar ,type varchar, rtime varchar)";

    /**
     * 继承SQLiteOpenHelper类,在构造方法中分别需要传入Context,数据库名称,CursorFactory(一般传入null
     * 
     * 为默认数据库),数据库版本号(不能为负数)。在SQLiteOpenHelper中首先执行的是onCreate方法
     * 
     * 在构造函数时并没有真正创建数据库
     * 
     * 而在调用getWritableDatabase或者getReadableDatabase方法时才真正去创建数据库
     * 
     * 返回一个SQLiteDatabase对象。
     * 
     * 数据存储到了data/data/应用包名/databases
     * 
     * @author 仲丛旭
     * 
     */
    private class MySQLiteOpen extends SQLiteOpenHelper {
        /**
         * 构造方法
         * 
         * @param context
         * @param name
         * @param factory
         * @param version
         */
        public MySQLiteOpen(Context context, String name,
                CursorFactory factory, int version) {
            super(context, name, factory, version);
            Log.i(TAG, "==数据库路径"+PATH);
            Log.i(TAG, "==MySQLiteOpen()");
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            Log.i(TAG, "==数据库没有表时创建一个");
            db.execSQL(SQL_CREATE_TABLE);
            db.execSQL(SQL_CREATE_TABLE2);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Log.i(TAG, "==升级数据库");
            if (newVersion > oldVersion) {
                db.execSQL("DROP TABLE IF EXISTS member_birthday");
                onCreate(db);
            }
        }

    }

    /**
     * 默认的构造方法自动去创建一个默认的数据库路径(SD卡的数据,需要到这个文来修改)
     */
    public SQLiteDataBaseHelper() {
        
        database = SQLiteDatabase.openDatabase(PATH, null,
                SQLiteDatabase.OPEN_READWRITE);
    }

    /**
     * 创建数据库,返回数据库对象
     * 
     * @param context
     */
    public SQLiteDataBaseHelper(Context context, String name) {
        mySQLiteOpen = new MySQLiteOpen(context, DB_NAME, null, VERSION);
        database = mySQLiteOpen.getReadableDatabase();
        // database = mySQLiteOpen.getWritableDatabase();
    }
    
    /**
     * 创建数据库,返回数据库对象
     * 
     * @param context
     */
    public SQLiteDataBaseHelper(Context context) {
        mySQLiteOpen = new MySQLiteOpen(context, DB_NAME, null, VERSION);
        database = mySQLiteOpen.getReadableDatabase();
        // database = mySQLiteOpen.getWritableDatabase();
    }

    /**
     * @作用 查询数据返回Cursor
     * @param sql
     * @param selectionArgs
     * @return
     */
    public Cursor selectCursor(String sql, String[] selectionArgs) {
        return database.rawQuery(sql, selectionArgs);
    }

    /**
     * @作用 执行带占位符的select语句,返回list集合
     * @param sql
     * @param selectionArgs
     * @return
     */
    public List<Map<String, String>> SelectData(String sql,
            String[] selectionArgs) {
        Cursor cursor = selectCursor(sql, selectionArgs);
        return cursorToList(cursor);
    }

    /**
     * @作用 已知一个cursor得到List集合
     * @param cursor
     * @return
     */
    private List<Map<String, String>> cursorToList(Cursor cursor) {
        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
        String[] arrColumnName = cursor.getColumnNames();
        while (cursor.moveToNext()) {
            Map<String, String> map = new HashMap<String, String>();
            for (int i = 0; i < arrColumnName.length; i++) {
                String cols_value = cursor.getString(i);
                map.put(arrColumnName[i], cols_value);
            }
            list.add(map);
        }
        if (cursor != null) {
            cursor.close();
        }
        return list;
    }

    /**
     * @作用 执行带占位符的update、insert、delete语句,更新数据库,返回true或false
     * @param sql
     * @param bindArgs
     *            问号中的参数值
     * @return boolean
     */
    public boolean updataData(String sql, Object[] bindArgs) {
        try {
            if (bindArgs == null) {
                database.execSQL(sql);
            } else {
                database.execSQL(sql, bindArgs);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * @作用 执行带占位符的select语句,返回结果集的个数。如果已经查询过了不推荐继续使用,占内存
     * @param sql
     * @param selectionArgs
     * @return int
     */
    public int selectCount(String sql, String[] selectionArgs) {
        Cursor cursor = database.rawQuery(sql, selectionArgs);
        int count = 0;
        if (cursor != null) {
            count = cursor.getCount();
            cursor.close();
        }
        return count;
    }

    /**
     * @作用 关闭数据库操作类
     */
    public void destroy() {
        if (mySQLiteOpen != null) {
            mySQLiteOpen.close();
            mySQLiteOpen = null;
        }
        if (database != null) {
            database.close();
            database = null;
        }
    }
}

自定义 数据类

package com.wyj.db_memberbirthday;

public class MemberBirthday {

    private String mid;// ID  //用户ID
    private String title;  //生日标题 或者姓名
    private String birthday_time;  // 生日时间
    private String type;   // 1 阴历  2 阳历
    private String rtime; //提醒时间
    
    public  MemberBirthday(String mid,String title, String birthday_time , String type ,String rtime){
        this.mid = mid;
        this.title = title;
        this.birthday_time =birthday_time;
        this.type = type;
        this.rtime = rtime;
    }
    public String getMid() {
        return mid;
    }
    public void setMid(String mid) {
        this.mid = mid;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getBirthday_time() {
        return birthday_time;
    }
    public void setBirthday_time(String birthday_time) {
        this.birthday_time = birthday_time;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getRtime() {
        return rtime;
    }
    public void setRtime(String rtime) {
        this.rtime = rtime;
    }

    
}

操作数据类

package com.wyj.db_memberbirthday;


import java.util.List;
import java.util.Map;

import com.wyj.db.SQLiteDataBaseHelper;

import android.content.Context;
import android.util.Log;


public class MemberBirthday_model {

    private final String TAG = "MemberBirthday_model";
    /** 数据库操作 */
    SQLiteDataBaseHelper db;
    public MemberBirthday_model(Context context) {
        
        db = new SQLiteDataBaseHelper(context, "cms");
        
    }

    public boolean insert(MemberBirthday info) {

        String sql = "INSERT INTO member_birthday(mid,title,birthday_time,type,rtime) values (?,?,?,?,?)";
        boolean flag = db.updataData(sql, new String[] { info.getMid(), info.getTitle(),
                info.getBirthday_time(), info.getType(), info.getRtime() });
        
        
//        String sql = "INSERT INTO tb_words(english,chinese) values (?,?)";
//        boolean flag = db.updataData(sql, new String[] { "1111111","22222222"});
        
        Log.i(TAG, "生日插入返回flag==" + flag);
        return flag;
    }

    
    public boolean update(MemberBirthday info, String id) {

        
        String sql = "UPDATE member_birthday SET mid = ?,title = ?,birthday_time = ?,type = ?,rtime = ?  WHERE _id = ?";
        

        boolean flag = db.updataData(sql, new String[] { info.getMid(), info.getTitle(),
                info.getBirthday_time(), info.getType(), info.getRtime(), id });
        Log.i(TAG, "生日更新返回flag==" + flag);
        
        return flag;
    }
    
    public List<Map<String, String>> select( String id) {
        List<Map<String, String>> list=null;
        
        if(id.equals("")){
            String sql = "SELECT * FROM member_birthday ";
            list = db.SelectData(sql, null);
        }else{
            String sql = "SELECT * FROM member_birthday WHERE _id = ?";
            list = db.SelectData(sql, new String[]{id});
        }
        Log.i(TAG,"生日查询的值"+list.toString());
        
        return list;
    }
    

}

在 具体activity 中调用

MemberBirthday_model memberbirdaydb=new MemberBirthday_model(AddBirthday.this);
        
        //添加
        MemberBirthday memberbirdayinfo=new MemberBirthday(Cms.APP.getMemberId(),birthday_title,rdate,birthdaytype,rtime);
        boolean flag =memberbirdaydb.insert(memberbirdayinfo);
        
        //修改
//        MemberBirthday memberbirdayinfo=new MemberBirthday(Cms.APP.getMemberId(),birthday_title,rdate,birthdaytype,rtime);
//        boolean flag =memberbirdaydb.update(memberbirdayinfo,"1");
        if(flag){
            Utils.ShowToast(AddBirthday.this,
                    "成功!");
        }else{
            Utils.ShowToast(AddBirthday.this,
                    "失败!");
        } 
原文地址:https://www.cnblogs.com/xiaoli3007/p/4293017.html