使用api方式查询数据库和sqlite3工具

1.      Android提供API供使用,不一定使用SQL语句;

2.      不用SQL语句

3.      sqlite3工具:直接用命令行操作数据库,SQL语句

数据库类

**
 * @author andong
 * 数据库帮助类, 用于创建和管理数据库的.
 */
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {

	private static final String TAG = "PersonSQLiteOpenHelper";

	/**
	 * 数据库的构造函数
	 * @param context
	 * 
	 * name 数据库名称
	 * factory 游标工程
	 * version 数据库的版本号 不可以小于1
	 */
	public PersonSQLiteOpenHelper(Context context) {
		super(context, "itheima28.db", null, 2);
	}

	/**
	 * 数据库第一次创建时回调此方法.
	 * 初始化一些表
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {

		// 操作数据库
		String sql = "create table person(_id integer primary key, name varchar(20), age integer);";
		db.execSQL(sql);		// 创建person表
	}

	/**
	 * 数据库的版本号更新时回调此方法,
	 * 更新数据库的内容(删除表, 添加表, 修改表)
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

		if(oldVersion == 1 && newVersion == 2) {
			Log.i(TAG, "数据库更新啦");
			// 在person表中添加一个余额列balance
			db.execSQL("alter table person add balance integer;");
		}
	}

}

Person类-----------------------------


操作数据库的Dao类

public class PersonDao2 {

	private static final String TAG = "PersonDao2";
	private PersonSQLiteOpenHelper mOpenHelper;	// 数据库的帮助类对象

	public PersonDao2(Context context) {
		mOpenHelper = new PersonSQLiteOpenHelper(context);
	}
	
	/**
	 * 添加到person表一条数据
	 * @param person
	 */
	public void insert(Person person) {
		SQLiteDatabase db = mOpenHelper.getWritableDatabase();
		if(db.isOpen()) {	// 如果数据库打开, 执行添加的操作
			
		ContentValues values = new ContentValues();
		values.put("name", person.getName());		// key作为要存储的列名, value对象列的值
		values.put("age", person.getAge());
		long id = db.insert("person", "name", values);  //id为影响行 参数(表名,缺省值填列名如果values为空则该列填入NULL,填入的记录)
		Log.i(TAG, "id: " + id);
			
			db.close();	// 数据库关闭
		}
	}
	
	/**
	 * 更据id删除记录
	 * @param id
	 */
	public void delete(int id) {
		SQLiteDatabase db = mOpenHelper.getWritableDatabase();	// 获得可写的数据库对象
		if(db.isOpen()) {	// 如果数据库打开, 执行添加的操作
			
			String whereClause = "_id = ?";
			String[] whereArgs = {id + ""};
			int count = db.delete("person", whereClause, whereArgs);
			Log.i(TAG, "删除了: " + count + "行");
			db.close();	// 数据库关闭
		}
	}
	

	/**
	 * 根据id找到记录, 并且修改姓名
	 * @param id
	 * @param name
	 */
	public void update(int id, String name) {
		SQLiteDatabase db = mOpenHelper.getWritableDatabase();
		if(db.isOpen()) {	// 如果数据库打开, 执行添加的操作
			ContentValues values = new ContentValues();
			values.put("name", name);
			
			int count  = db.update("person", values, "_id = ?", new String[]{id + ""});

			Log.i(TAG, "修改了: " + count + "行");
			
			db.close();	// 数据库关闭
		}
	}
	
	public List<Person> queryAll() {
		SQLiteDatabase db = mOpenHelper.getReadableDatabase();	// 获得一个只读的数据库对象
		if(db.isOpen()) {
			String[] columns = {"_id", "name", "age"};	// 需要的列
			String selection = null;	// 选择条件, 给null查询所有
			String[] selectionArgs = null;	// 选择条件的参数, 会把选择条件中的? 替换成数据中的值
			String groupBy = null;	// 分组语句  group by name
			String having = null;	// 过滤语句
			String orderBy = null;	// 排序
			
			Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);
<pre name="code" class="java">                       //<span style="font-family: Arial, Helvetica, sans-serif;">使用Cursor后要关闭,会一直保存数据,否则内存溢出;cursor.close()</span>
int id;String name;int age;if(cursor != null && cursor.getCount() > 0) {List<Person> personList = new ArrayList<Person>();while(cursor.moveToNext()) { // 向下移一位, 知道最后一位, 不可以往下移动了, 停止.id = cursor.getInt(0);name = cursor.getString(1);age = cursor.getInt(2);personList.add(new Person(id, name, age));}db.close();return personList;}db.close();}return null;}/** * 根据id查询人 * @param id * @return */public Person queryItem(int id) {SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象if(db.isOpen()) {String[] columns = {"_id", "name", "age"}; // 需要的列String selection = "_id = ?"; // 选择条件, 给null查询所有String[] selectionArgs = {id + ""}; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值String groupBy = null; // 分组语句 group by nameString having = null; // 过滤语句String orderBy = null; // 排序Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);
                       //<span style="font-family: Arial, Helvetica, sans-serif;">使用Cursor后要关闭,会一直保存数据,否则内存溢出;cursor.close()</span>
if(cursor != null && cursor.moveToFirst()) { // cursor对象不为null, 并且可以移动到第一行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;}}
 

测试类

public class TestCase2 extends AndroidTestCase {

	private static final String TAG = "TestCase";

	public void test() {
		// 数据库什么时候创建
		PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());
		
		// 第一次连接数据库时创建数据库文件. onCreate会被调用
		openHelper.getReadableDatabase();
	}
	
	public void testInsert() {
		PersonDao2 dao = new PersonDao2(getContext());
		dao.insert(new Person(0, "zhouqi", 88));
	}
	
	public void testDelete() {
		PersonDao2 dao = new PersonDao2(getContext());
		dao.delete(8);
	}

	public void testUpdate() {
		PersonDao2 dao = new PersonDao2(getContext());
		dao.update(3, "fengjie");
	}

	public void testQueryAll() {
		PersonDao2 dao = new PersonDao2(getContext());
		List<Person> personList = dao.queryAll();
		
		for (Person person : personList) {
			Log.i(TAG, person.toString());
		}
	}

	public void testQueryItem() {
		PersonDao2 dao = new PersonDao2(getContext());
		Person person = dao.queryItem(4);
		Log.i(TAG, person.toString());
	}
}













---------------------------------------------------------------------------------例子:手机安全卫士05-----------------------------------------------------------------------

(1)创建数据库类,新建一个包db.dao

public class BlackNumberDBOpenHelper extends SQLiteOpenHelper {

	/**
	 * 数据库创建的构造方法 数据库名称 blacknumber.db
	 * @param context
	 */
	public BlackNumberDBOpenHelper(Context context) {
		super(context, "blacknumber.db", null, 1);
	}
	//初始化数据库的表结构
	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("create table blacknumber (_id integer primary key autoincrement,number varchar(20),mode varchar(2))");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

	}

}

(2)数据库业务类,新建一个包.db

/**
 * 黑名单数据库的增删改查业务类
 * @author Administrator
 *
 */
public class BlackNumberDao {
	private BlackNumberDBOpenHelper helper;
	/**
	 * 构造方法
	 * @param context 上下文
	 */
	public BlackNumberDao(Context context) {
		helper = new BlackNumberDBOpenHelper(context);
	}
	/**
	 * 查询黑名单号码是是否存在
	 * @param number
	 * @return
	 */
	public boolean find(String number){
		boolean result = false;
		SQLiteDatabase db = helper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from blacknumber where number=?", new String[]{number});
		if(cursor.moveToNext()){
			result = true;
		}
		cursor.close();
		db.close();
		return result;
	}
	/**
	 * 查询黑名单号码的拦截模式
	 * @param number
	 * @return 返回号码的拦截模式,不是黑名单号码返回null
	 */
	public String findMode(String number){
		String result = null;
		SQLiteDatabase db = helper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select mode from blacknumber where number=?", new String[]{number});
		if(cursor.moveToNext()){
			result = cursor.getString(0);
		}
		cursor.close();
		db.close();
		return result;
	}
	/**
	 * 查询全部黑名单号码
	 * @return
	 */
        //BackNUmberInfo为一个类,类似于Person类
	public List<BlackNumberInfo> findAll(){
		List<BlackNumberInfo> result = new ArrayList<BlackNumberInfo>();
		SQLiteDatabase db = helper.getReadableDatabase();
		Cursor cursor = db.rawQuery("select number,mode from blacknumber order by _id desc", null);
		while(cursor.moveToNext()){
			BlackNumberInfo info = new BlackNumberInfo();
			String number = cursor.getString(0);
			String mode = cursor.getString(1);
			info.setMode(mode);
			info.setNumber(number);
			result.add(info);
		}
		cursor.close();
		db.close();
		return result;
	}
	
	
	/**
	 * 添加黑名单号码
	 * @param number 黑名单号码
	 * @param mode 拦截模式 1.电话拦截 2.短信拦截 3.全部拦截
	 */
	public void add(String number,String mode){
		SQLiteDatabase db = helper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("number", number);
		values.put("mode", mode);
		db.insert("blacknumber", null, values);
		db.close();
	}
	/**
	 * 修改黑名单号码的拦截模式
	 * @param number 要修改的黑名单号码
	 * @param newmode 新的拦截模式
	 */
	public void update(String number,String newmode){
		SQLiteDatabase db = helper.getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put("mode", newmode);
		db.update("blacknumber", values, "number=?", new String[]{number});
		db.close();
	}
	/**
	 * 删除黑名单号码
	 * @param number 要删除的黑名单号码
	 */
	public void delete(String number){
		SQLiteDatabase db = helper.getWritableDatabase();
		db.delete("blacknumber",  "number=?", new String[]{number});
		db.close();
	}
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值