android 中对数据库增删改查操作的封装

作者:分开不是尽头 | 创建时间: 2023-05-10
在实际软件项目开发中,可能有很多童鞋选择将对数据库的基本增删改查操作进行封装,以供外部调用。在android开发中,我们也可以对其进行封装,废话少说,具体代码如下...
android 中对数据库增删改查操作的封装

操作方法

首先在自己项目中新建一个类,类名自拟,如SqliteHelper,同时继承SqliteOpenHelper并实现其中的方法onCreate(SQLiteDatabase db)方法,该类负责创建数据库并创建数据表。代码如下: import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * 新建一个SqlitHelper类,继承SQLiteOpenHelper并实现onCreate(SQLiteDatabase db)方法 * @author lxd */ public class SqlitHelper extends SQLiteOpenHelper { //数据库版本号,大于等于1即可 private static final int VERSION = 1; //自己定义的数据库名称 private static String databaseName = "shop"; //构造方法 public SqlitHelper(Context context) { super(context, databaseName, null, VERSION);    }        @Override      public void onCreate(SQLiteDatabase db)    { //建表语句,只执行一次 db.execSQL("create table commodityinfo(id integer primary key autoincrement" + ",commodityname varchar(40), commodityprice varchar(40),commoditynum varchar(40))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVer, int newVersion) {} }

创建类SqliteManager,其中封装了增删改查的操作,代码如下: import java.util.ArrayList; import java.util.List; import com.lxd.domain.Commodity; //这个包下面创建了与表名对应的be                                                                            //en类,如Commodity import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; public class SqliteManager { //对SqlitHelper的引用 private SqlitHelper sqlitHelper = null; //数据库具体操作类,其中封装insert、update delete、query等操作 private SQLiteDatabase sqLiteDatabase=null; //上下文对象,在外部初始化此类时传入的Context,保证在是在同一环境下的操作    Context context; //构造方法 public CopyOfSqliteManager(Context context) { this.context = context;        this.sqlitHelper = new SqlitHelper(context);     } /** * 打开数据库链接 */ public void openWriteConnection() { this.sqLiteDatabase = sqlitHelper.getWritableDatabase(); } public void openReadConnection() { this.sqLiteDatabase = sqlitHelper.getWritableDatabase(); } /** * 关闭数据库链接 */ public void releaseConnection() { if (sqLiteDatabase!=null) { sqLiteDatabase.close(); } if (sqLiteDatabase!=null) { sqLiteDatabase.close(); } } /** * 插入数据方法 * @param table表名(必填) * @param nullColumnHack * @param values 要插入的ContentValues键值对:参考android API 文档)     * @return 插入成功与否的标志 */ public boolean insert(String table,String nullColumnHack,ContentValues values) { boolean flag = false; openWriteConnection(); long count = sqLiteDatabase.insert(table, null, values); flag = (count>0?true:false); releaseConnection(); return flag; } /** * 删除记录 * @param table 表名(必填) * @param whereClause 条件(如:where id=?) * @param whereArgs 条件值(如:new String[]{1})对应where条件 * @return 插入成功与否的标志 */ public boolean delete(String table,String whereClause,String[] whereArs) { boolean flag = false; openWriteConnection(); int count = sqLiteDatabase.delete(table, whereClause, whereArs); flag = (count>0?true:false); releaseConnection(); return flag; } /** * 更新表数据 * @param table 表名(必填) * @param values 所要更改的ContentValues键值对(参考android API 文档) * @param whereClause 条件(如:where id=? * @param whereArgs 条件值(如:new String[]{1})对应where条件 * @return 插入成功与否的标志 */ public boolean update(String table,ContentValues values,String whereCl                                                                                              ause,String[] whereArgs) { boolean flag = false; openWriteConnection(); int count = sqLiteDatabase.update(table, values, whereClause, whereArgs); flag = (count>0?true:false);        releaseConnection();        return flag;    }        /** * 查找,返回所有记录的集合,可通过多种条件查找 * @param table 表名(必填) * @param columns 列名(可为null) * @param selection 所选字段(可为null) * @param selectionArgs 字段值(可为null) * @param groupBy 分组(可为null) * @param having (可为null) * @param orderBy(排序可为null) * @return 返回所查询条件所满足的记录集合 */ public List<Commodity> query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)    { List<Commodity> list = new ArrayList<Commodity>(); openReadConnection(); Cursor cursor = sqLiteDatabase.query(table, null, selection, selectionArgs, groupBy, having, orderBy); while (cursor.moveToNext()) { Commodity commodity = new Commodity(); commodity.setId(cursor.getInt(0)); commodity.setCommodityname(cursor.getString(1)); commodity.setCommoditynum(cursor.getString(2)); commodity.setCommoditynum(cursor.getString(3)); list.add(commodity); } releaseConnection(); return list; } /** * 参数简化版查找,除了表名,其它参数至null * 查找,返回所有记录的集合 * @param table * @return 返回所查询条件所满足的记录集合 */ public List<Commodity> query(String table) { List<Commodity> list = new ArrayList<Commodity>(); openReadConnection(); Cursor cursor = sqLiteDatabase.query(table, null, null, null, null, null, null); while (cursor.moveToNext()) { Commodity commodity = new Commodity(); commodity.setId(cursor.getInt(0)); commodity.setCommodityname(cursor.getString(1)); commodity.setCommoditynum(cursor.getString(2)); commodity.setCommoditynum(cursor.getString(3)); list.add(commodity); } releaseConnection(); return list; } /** * 参数简化版查找 * 查找,可以通过列名条件查找,返回满足条件的记录集合 * @param table * @param columns * @param selection * @param selectionArgs * @return 返回所查询条件所满足的记录集合 */ public List<Commodity> query(String table, String[] columns, String sel                                                                                     ection, String[] selectionArgs) { List<Commodity> list = new ArrayList<Commodity>(); openReadConnection(); Cursor cursor = sqLiteDatabase.query(table, columns, selection, selectionArgs, null, null, null); while (cursor.moveToNext()) { Commodity commodity = new Commodity(); commodity.setId(cursor.getInt(0)); commodity.setCommodityname(cursor.getString(1)); commodity.setCommoditynum(cursor.getString(2)); commodity.setCommoditynum(cursor.getString(3)); list.add(commodity); } releaseConnection(); return list; } }

创建与表对应的been类,如Commodity,其中封装了与数据表对应的属性字段。以供查询使用。实现Serializable可以保证该类能够在网络上传输。代码如下: import java.io.Serializable; public class Commodity implements Serializable { private static final long serialVersionUID = 1L; private int id=0; private String commodityprice =""; private String commoditynum = ""; private String commodityname = ""; public Commodity()    {} public String getCommodityname() { return commodityname; } public void setCommodityname(String commodityname) { this.commodityname = commodityname; } public String getCommodityprice() { return commodityprice; } public void setCommodityprice(String commodityprice) { this.commodityprice = commodityprice; } public String getCommoditynum() { return commoditynum; } public void setCommoditynum(String commoditynum) { this.commoditynum = commoditynum; } public static long getSerialversionuid() { return serialVersionUID; } public int getId() { return id; } public void setId(int id) { this.id = id; } }

最后,测试类中或者在需要对数据库进行操作的类中实例化SqliteManager类即可,并调用其中相应方法进行操作: 如在主界面中要进行删除操作: protected void delete() { //commodityinfo是表名 String condition = "棉花"; sqliteManager.delete("commodityinfo", "commodityname = ?", new St                                                                                                           ring[]{condition}); query(); //将更新后的数据重新查一遍显示到界面上 } /** * 添加 */ protected void insert() { ContentValues values = new ContentValues(); values.put("commodityname", "酱油"); values.put("commodityprice", "10"); //Toast.makeText(getBaseContext(), ed2.getText().toString(), 0).show();        sqliteManager.insert("commodityinfo", null, values); } 其它操作类似。以上类可以直接在项目中使用,只需要根据需要在自己项目中稍微修改就能使用。

温馨提示

使用完数据库后要及时关闭数据库连接
在SqliteManager类中查询方法用到的是sqLiteDatabase = sqlitHelper.getReadableDatabase();();
其它操作用到的是sqLiteDatabase=sqlitHelper.getWritableDatabase();
点击展开全文

更多推荐