多语言展示
当前在线:597今日阅读:179今日分享:36

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

在实际软件项目开发中,可能有很多童鞋选择将对数据库的基本增删改查操作进行封装,以供外部调用。在android开发中,我们也可以对其进行封装,废话少说,具体代码如下
工具/原料
1

Sqlite数据库

2

Android IDE

方法/步骤
1

首先在自己项目中新建一个类,类名自拟,如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)      {}}

2

创建类SqliteManager,其中封装了增删改查的操作,代码如下:import java.util.ArrayList;import java.util.List;import com.lxd.domain.Commodity; //这个包下面创建了与表名对应的be                                                                            //en类,如Commodityimport 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 query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)    {        List list = new ArrayList();       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 query(String table)   {        List list = new ArrayList();        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 query(String table, String[] columns, String sel                                                                                     ection, String[] selectionArgs)   {        List list = new ArrayList();       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;    }}

3

创建与表对应的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;   }}

4

最后,测试类中或者在需要对数据库进行操作的类中实例化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);    }其它操作类似。以上类可以直接在项目中使用,只需要根据需要在自己项目中稍微修改就能使用。

注意事项
1

使用完数据库后要及时关闭数据库连接

2

在SqliteManager类中查询方法用到的是sqLiteDatabase = sqlitHelper.getReadableDatabase();();

3

其它操作用到的是sqLiteDatabase=sqlitHelper.getWritableDatabase();

推荐信息