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

2026-03-07 23:17:32

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类,如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;

    }

}

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);

    }

其它操作类似。以上类可以直接在项目中使用,只需要根据需要在自己项目中稍微修改就能使用。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢