先回顾一下数据库增删改查的基本操作语句:
1.向名为user_tb的表中插入一条数据:insert into user_tb (name,age,sex) values ('zhangsan','24','male');
2.修改表中zhangsan的年龄为27:update user_tb set age = '27' where name = 'zhangsan';
3.查询表中zhangsan的信息:select * from user_tb where name = 'zhangsan';
4.查询表中所有的信息:select * from user_tb;
5.删除表中的zhangsan的数据:delete from user_tb where name = 'zhangsan';
6.删除表中所有的数据:delete from user_tb;
Android提供了SQLiteDatabase代表一个数据库,一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,就可以通过该对象来管理和操作数据库了。Android还提供了一个管理数据库的工具类--SQLiteOpenHelper,用于管理数据库的创建和版本更新。一般的用法是创建SQLiteOpenHelper的子类,并重写它的onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)方法。当第一次创建数据库时回调onCreate()方法,一般在该方法里生成数据库表结构;当数据库版本更新时回调onUpgrade()方法。
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
public MySQLiteOpenHelper(Context context) {
super(context, "user_info.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO 创建表
db.execSQL("create table user_tb (id integer primary key autoincrement, name varchar(20), age integer, sex varchar(5))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
通过MySQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()方法打开数据库对应的SQLiteDatabase对象。其存储位置为/data/data/<应用包名>/databases/xx.db
(方式一)以下是通过SQL语句操作SQLite数据库:
public class DBService {
private MySQLiteOpenHelper helper;
public DBService(Context context) {
this.helper = new MySQLiteOpenHelper(context);
}
/**
* 向数据库中插入一条数据
* @param userName
* @param age
* @param sex
*/
public void addUser(String userName, int age,String sex){
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("insert into user_tb (name,age,sex) values(?,?,?);", new Object[]{userName,age,sex});
db.close();
}
/**
* 修改一条数据
* @param userName
* @param sex
*/
public void updateUser(String userName, int age){
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("update user_tb set age = ? where name = ?", new Object[]{age,userName});
db.close();
}
/**
* 查询所有的数据
* @return
*/
public Cursor queryUser(){
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from user_tb", null);
//db.close(); //db在这边不能close,不然后面使用查询到的cursor时会出问题,在使用过cursor之后一定要记得关闭cursor和db(下同)
return cursor;
}
/***
* 删除一条数据
* @param userName
*/
public void deleteUser(String userName){
SQLiteDatabase db = helper.getWritableDatabase();
db.execSQL("delete from user_tb where name = ?",new Object[]{userName});
db.close();
}
}
(二)Android的SQLiteDatabase提供了操作数据的api:
public class DBService2 {
private MySQLiteOpenHelper helper;
public DBService2(Context context) {
this.helper = new MySQLiteOpenHelper(context);
}
/**
* 向数据库中插入一条数据
* @param userName
* @param age
* @param sex
* @return long rowId 返回受影响行的id,如果插入出错则返回-1
*/
public long addUser(String userName, int age, String sex){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name", userName);
values.put("age", age);
values.put("sex", sex);
/* insert(String table, String nullColumnHack, ContentValues values)参数说明
* table:代表要插入数据的表名;
* nullColumnHack:代表强行插入null值的数据列的列名;
* values:代表一行记录的数据。(ContentValues类似于map)
*/
long rowId = db.insert("user_tb", null, values);
db.close();
return rowId;
}
/**
* 修改一条数据
* @param userName
* @param age
* @return int rows 受影响的行数
*/
public int updateUser(String userName, int age){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("age", age);
/* update(String table, ContentValues values, String whereClause, String[] whereArgs)参数说明
* table:代表要更新数据的表名;
* values:代表要更新的数据;
* whereClause:满足whereClause子句的记录会被更新,传null则代表更新全部;
* whereArgs:whereClause子句的参数值
*/
int rows = db.update("user_tb", values, "name = ?", new String[]{userName});
db.close();
return rows;
}
/**
* 查询所有的数据
* @return
*/
public Cursor queryUser(){
SQLiteDatabase db = helper.getReadableDatabase();
/* query(boolean distinct, String table, String[] columns,
* String selection, String[] selectionArgs, String groupBy,
* String having, String orderBy, String limit)
* distinct:是否去除重复记录;
* table:要查询数据的表名;
* columns:要查询出来的列名(传null就会查询全部列名,相当于select * ...);
* selection:查询条件子句
* selectionArgs:用于为selection子句中的占位符传递参数值
* groupBy:分组
* having:
* orderBy:排序
* limit:限制查询出来的结果
*/
Cursor cursor = db.query(true, "user_tb", null, null, null, null, null, "age desc", null);
//db.close();
return cursor;
}
/***
* 删除一条数据
* @param userName
* @return int rows 返回被删除的记录数,没有任何数据被删除则返回0
*/
public int deleteUser(String userName){
SQLiteDatabase db = helper.getWritableDatabase();
/* delete(String table, String whereClause, String[] whereArgs)参数说明
* table:代表要删除数据的表名;
* whereClause:满足whereClause子句的记录会被更新,传null则代表删除全部;
* whereArgs:whereClause子句的参数
*/
int rows = db.delete("user_tb", "name = ?", new String[]{userName});
db.close();
return rows;
}
}