在android中使用数据库,可以使用sql语句,也可以使用android对sql封装的api。
android对sql封装的api的操作添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。
SQLiteOpenHelper 这个类用于数据库的创建。
/**
* 数据库的构造函数
* @param context
*
* name 数据库名称
* factory 游标工程
* version 数据库的版本号 不可以小于1
*/
public Sqlitedatabasedb(Context context, String name,
CursorFactory factory, int version) {
super(context, name, null, version);
// TODO Auto-generated constructor stub
}
/**
* 数据库第一次创建时回调此方法.
* 初始化一些表
*/
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
// 操作数据库
String sql = "create table person(_id integer primary key, name varchar(10), age integer);";
db.execSQL(sql); // 创建person表
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
Log.i("db upgrade", TAG);
}
然后我们还要封装一个实例对象,这个比较简单,这里就不详述了。
然后我们要封装一个类,实现基本的增删查改操作:
private Sqlitedatabasedb mSqlitedatabasedb;
public persondao(Context mContext,String name,int version){
mSqlitedatabasedb = new Sqlitedatabasedb(mContext, name, null, version);
Log.i("sssss", "persondao");
}
/**
* 添加到person表一条数据
* @param person
*/
public void insert(person mPerson){
SQLiteDatabase dbDatabase = mSqlitedatabasedb.getWritableDatabase();
if (dbDatabase.isOpen()) {
dbDatabase.execSQL("insert into person(name, age) values(?, ?);", new Object[]{mPerson.getName(), mPerson.getAge()});
dbDatabase.close();
}
Log.i("insert", "persondao");
}
/**
* 更据id删除记录
* @param id
*/
public void deleate(int id){
SQLiteDatabase dbDatabase = mSqlitedatabasedb.getWritableDatabase();
if (dbDatabase.isOpen()) {
dbDatabase.execSQL("delete from person where _id = ?;", new Integer[]{id});
dbDatabase.close();
}
}
/**
* 根据id找到记录, 并且修改姓名
* @param id
* @param name
*/
public void upgrade(int id,String name){
SQLiteDatabase dbDatabase = mSqlitedatabasedb.getWritableDatabase();
if (dbDatabase.isOpen()) {
dbDatabase.execSQL("update person set name = ? where _id = ?;", new Object[]{name, id});
dbDatabase.close();
}
}
/**
* 查询所有内容
* @param id
* @param name
*/
public List<person> findall(){
SQLiteDatabase dbDatabase = mSqlitedatabasedb.getReadableDatabase();
List<person> mList = new ArrayList<person>();
int id;
String name;
int age;
if (dbDatabase.isOpen()) {
Cursor cursor = dbDatabase.rawQuery("select _id, name, age from person;", null);
if (cursor!=null && cursor.getCount()>0) {
while(cursor.moveToNext()) {
id = cursor.getInt(0);
name = cursor.getString(1);
age = cursor.getInt(2);
mList.add(new person(id, name, age));
}
}
dbDatabase.close();
}
return mList;
}
/**
* 根据id查询人
* @param id
* @return
*/
public person queryItem(int id) {
SQLiteDatabase db = mSqlitedatabasedb.getReadableDatabase(); // 获得一个只读的数据库对象
if(db.isOpen()) {
Cursor cursor = db.rawQuery("select _id, name, age from person where _id = ?;", new String[]{id + ""});
if(cursor != null && cursor.moveToFirst()) {
int _id = cursor.getInt(0);
String name = cursor.getString(1);
int age = cursor.getInt(2);
db.close();
return new person(_id, name, age);
}
db.close();
}
return null;
}
最后看看我们的测试方法:
persondao mPersondao = new persondao(this, "zhengwei.db", 1);
mPersondao.insert(new person(0,"xiaoming", 20));
mPersondao.insert(new person(0,"zhangsan", 25));
mPersondao.insert(new person(0,"eeeee", 26));
List<person> mList = new ArrayList<person>();
mList = mPersondao.findall();
for (person mPerson:mList) {
Log.i(""+mPerson, "testdb");
}
mPersondao.upgrade(2, "虎虎");
person mPerson = new person();
mPerson = mPersondao.queryItem(2);
Log.i(""+mPerson, "testdbfind");
这个是使用基本的sql语句进行操作,当然也可以使用android提供的API实现数据库的增删改查操作。