数据库操作 简单汇总
操作封装类
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, "失败!"); }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。