android_SQLite

先回顾一下数据库增删改查的基本操作语句:

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值