SQLite数据库实用的封装
2016-04-22 23:13
423 查看
SQLite数据库简单封装:
每一张表 都会对应一个Bean 和一个Dao类
SqliteHelper 主要负责创建数据库和更新数据库 主要为其提供 创建表的sql语句 数据库名称 和数据库版本号
SqliteHelper类
bean类主要负责 对应表 成员变量最好和表的字段名对应
4.dao类主要负责操作对应的表的增删该查 以及存储表的字段名 和表的名称 添加的数据可以利用反射进行操作
//测试例子
每一张表 都会对应一个Bean 和一个Dao类
SqliteHelper 主要负责创建数据库和更新数据库 主要为其提供 创建表的sql语句 数据库名称 和数据库版本号
SqliteHelper类
public class SqliteHelper extends SQLiteOpenHelper { private static String DB_NAME="gac.db"; private static int VERSION = 1; private static final String USER_TABLE_CREATE="create table if not exists " +UserDao.TABLE_NAME +" (" +UserDao.COLUMN_ID +" INTEGER PRIMARY KEY AUTOINCREMENT, " +UserDao.COLUMN_NAME+" TEXT)"; private Context context; private static SqliteHelper instance; public static SqliteHelper getInstance(Context context){ if(instance == null){ instance = new SqliteHelper(context.getApplicationContext()); } return instance; } public SqliteHelper(Context context){ super(context,DB_NAME,null,VERSION); this.context = context; } public Context getContext(){ return context; } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(USER_TABLE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } public void closeDB(){ if(instance != null){ try{ SQLiteDatabase db = instance.getWritableDatabase(); db.close(); }catch (Exception e){ e.printStackTrace(); } instance = null; } } }
bean类主要负责 对应表 成员变量最好和表的字段名对应
public class UserBean { public String name; public int id; public UserBean(){ } public UserBean(String name){ this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
4.dao类主要负责操作对应的表的增删该查 以及存储表的字段名 和表的名称 添加的数据可以利用反射进行操作
public class UserDao { public static String TABLE_NAME = "user"; public static String COLUMN_ID = "id"; public static String COLUMN_NAME = "name"; private SqliteHelper helper = null; public UserDao(Context context){ helper = new SqliteHelper(context); } //根据cursor获取userbean private UserBean getUserBeanByCursor(Cursor cursor){ UserBean user = new UserBean(); Class< ? extends UserBean> clazz = user.getClass(); Field[] fields = clazz.getDeclaredFields(); for(Field field :fields){ if(field.getName().equals("id")){ user.id = cursor.getInt(cursor.getColumnIndex("id")); continue; } if(field.getName().equals("name")){ user.name = cursor.getString(cursor.getColumnIndex("name")); continue; } } return user; } //根据user获取contentvalues private ContentValues getContentValues(UserBean user){ ContentValues values = new ContentValues(); Class<? extends UserBean> clazz = user.getClass(); try{ Method[] methods = clazz.getMethods(); Object[] args = null; for(Method method : methods) { String mName = method.getName(); if (mName.startsWith("get") && !mName.startsWith("getClass")) { String filedName = mName.substring(3, mName.length()).toLowerCase(); Log.e("gac","fieldName:"+filedName); if(filedName.equals("id")){ //id 让它自动增加 continue; } Object value = method.invoke(user, args); if (value instanceof String) { values.put(filedName, (String) value); } else if (value instanceof Integer) { values.put(filedName, (Integer) value); } } } }catch (Exception e){e.printStackTrace();} return values; } //添加用户 public boolean addUser(UserBean user){ boolean flag = false; SQLiteDatabase database = null; long id = -1; try{ database = helper.getWritableDatabase(); ContentValues values = getContentValues(user); Class<? extends UserBean> calzz = user.getClass(); String tableName = TABLE_NAME; id = database.insert(tableName,null,values); flag = (id !=-1?true:false); if(database != null){ database.close(); } }catch (Exception e){ e.printStackTrace(); } Log.e("gac","addUser flag:"+flag); return flag; } //删除用户 public boolean delteUser(String id,String name){ boolean flag = false; String wereClause = "id = ? and name = ?"; String [] whereArgs = new String[]{id,name}; SQLiteDatabase db = helper.getWritableDatabase(); try{ int res = db.delete(TABLE_NAME,wereClause,whereArgs); flag = (res != 0?true:false); if(db != null){ db.close(); } }catch (Exception e){ e.printStackTrace(); } return flag; } //更新数据库 public boolean updateUser(String whereClause,String[] whereArgs,UserBean user){ // String wereClause = "id = ? and name = ?"; // String [] whereArgs = new String[]{id,name}; boolean flag = false; SQLiteDatabase db = helper.getWritableDatabase(); try{ ContentValues values = getContentValues(user); int res = db.update(TABLE_NAME,values,whereClause,whereArgs); flag = (res <= 0?false:true); db.close(); }catch (Exception e){e.printStackTrace();} Log.e("gac","updateUser:"+flag); return flag; } //查询 public List<UserBean> getUserList(String sql,String[] whereArgs){ SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.rawQuery(sql, whereArgs); List<UserBean> mList = null; if(cursor != null){ mList = new ArrayList<>(); while (cursor.moveToNext()){ mList.add(getUserBeanByCursor(cursor)); } } return mList; } }
//测试例子
//new UserDao(this).addUser(new UserBean("gac")); // new UserDao(this).updateUser("id = ?",new String[]{1+""},new UserBean("gac1")); List<UserBean> list = new UserDao(this).getUserList("select * from " + UserDao.TABLE_NAME, null); for(int i =0; i < list.size(); i++){ Log.e("gac",list.get(i).getName()); Log.e("gac",list.get(i).getId()+""); }
相关文章推荐
- Azure Redis Cache (3) 在Windows 环境下使用Redis Benchmark
- Mac 安装和卸载 Mysql5.7.11 的方法
- MYSQL常用函数
- Redis的安装-Redis学习笔记一
- MySQL Workbench update语句错误Error Code: 1175.
- SQL语句截取字符串
- Redis、Redis+sentinel安装(Ubuntu 14.04下Redis安装及简单测试)
- Mysql导入sql脚本到数据库
- jdbc 通过rs.getString()获取数据库中的时间字段问题
- 数据库之SQL语法
- PostgreSQL之Array_to_String用法
- 单用户进入SQLServer并修改行版本控制级别
- [参考]redis存储商品信息,自增订单或商品id,缓存评论!
- SQL判断语句用法和多表查询
- 练习003
- SQL-查询JIRA中已创建与已解决问题对比报告
- java 操作redist
- [参考]spring整合redis!
- MSSQL 中双重循环实现发货数量的拆分
- SQL的一些基础知识