android 中对数据库增删改查操作的封装
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);
}
其它操作类似。以上类可以直接在项目中使用,只需要根据需要在自己项目中稍微修改就能使用。