当前位置: 首页 > news >正文

Android下的SQLite数据库的相关操作及AndroidTestCase测试

一:创建数据库

 

package com.itcode.mysqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * 继承SQLiteOpenHelper,创建数据库
 * @author Administrator
 *
 */
public class MySQLiteOpenHelper extends SQLiteOpenHelper{

	//一:声明构造函数
	/**
	 * @param context 当前应用的环境,用来确定数据库目录
	 * @param name  数据库文件的名字
	 * @param factory 游标工厂,用来创建结果集对象
	 * @param version 数据库版本 从1开始
	 */
	public MySQLiteOpenHelper(Context context) {
		super(context, "itcode.db", null, 1);
	}

	//二:重写onCreate方法 数据库被创建时调用 
	public void onCreate(SQLiteDatabase db) {
		System.out.println("MySQLiteOpenHelper-->onCreate 被调用!");
		//1.创建数据库
		db.execSQL("create table account(_id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),balance INTEGER)");
//		db.execSQL("CREATE TABLE account(_id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(20))");	// 执行一条SQL语句

	}
	//三:重写onUpgreade方法,数据库时调用
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//		System.out.println("MySQLiteOpenHelper-->onUpgrade 被调用");
//		db.execSQL("alter table account ADD balance integer");
//		db.execSQL("ALTER TABLE account ADD balance INTEGER");

	}

}


 

二:对数据库进行CRUD操作

 

package com.itcode.mysqlite;


import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;

public class AccountDao {
	//一:创建AccountDao时依据当前context创建数据库
	private MySQLiteOpenHelper mySQLiteOpenHelper;
	public AccountDao(Context context){
		mySQLiteOpenHelper = new MySQLiteOpenHelper(context);
	}
	//二:增:传进来一个Account,将此对象加入数据库
	public int add(Account a){
		//1.获取相应的(可写的)数据库
		SQLiteDatabase writableDatabase = mySQLiteOpenHelper.getWritableDatabase();
		//2.执行语句
		writableDatabase.execSQL("insert into account(name,balance) values(?,?)", new Object[]{a.getName(),a.getBalance()});
		//3.获取插入的数据集:
		Cursor rawQuery = writableDatabase.rawQuery("select _id from account order by _id desc limit 1", null);
		rawQuery.moveToNext();
		int id = rawQuery.getInt(rawQuery.getColumnIndex("_id"));
		//4.关闭数据库
		return id;
	}
	//三:删:根据id删除数据库中相应的数据项
	public  void delete(int id){
		//1.获取相应的(可写的)数据库
		SQLiteDatabase writableDatabase = mySQLiteOpenHelper.getWritableDatabase();
		//2.执行删除语句
		writableDatabase.execSQL("Delete from account where _id = ?",new Object[]{id});
		//3.关闭数据库
		writableDatabase.close();
	}
	//四:改:传进来一个Account,根据Account的对象的id修改name 和balance
	public void update(Account a){
		//1.获取相应的(可写的)数据库
		SQLiteDatabase writableDatabase = mySQLiteOpenHelper.getWritableDatabase();
		//2.执行更新语句
		writableDatabase.execSQL("update account set name=?,balance = ? where _id = ?",new Object[]{a.getName(),a.getBalance(),a.getId()});
		//3.关闭数据库
		writableDatabase.close();
	}
	//五:查:根据id查询数据库
	public Account query(int id){
		//1.获取相应的(可读的)数据库
		SQLiteDatabase readableDatabase = mySQLiteOpenHelper.getReadableDatabase();
		//2.执行更新语句
		Cursor rawQuery = readableDatabase.rawQuery("select * from account where _id=?",  new String[]{String.valueOf(id)});
		//3.将查询到的数据赋值给Account对象
		Account a = null;
		while(rawQuery.moveToNext()){
			Integer balance = Integer.valueOf(rawQuery.getString(rawQuery.getColumnIndex("balance")));
			String name = rawQuery.getString(rawQuery.getColumnIndex("name"));
			a = new Account(id,name,balance);
		}
		//3.关闭结果集与数据库
		rawQuery.close();
		readableDatabase.close();
		return a;
	}
	//六:查询所有,将查询到的所有数据放在list集合中返回
	public List<Account> queryAll(){
		List<Account> list = new ArrayList<Account>();
		Account a = null;
		//1.获取相应的(可读的)数据库
		SQLiteDatabase readableDatabase = mySQLiteOpenHelper.getReadableDatabase();
		Cursor rawQuery = readableDatabase.rawQuery("Select * from account",null);
		while(rawQuery.moveToNext()){
			Integer id = Integer.valueOf(rawQuery.getString(rawQuery.getColumnIndex("_id")));
			String name = rawQuery.getString(rawQuery.getColumnIndex("name"));
			Integer balance = Integer.valueOf(rawQuery.getString(rawQuery.getColumnIndex("balance")));
			a = new Account(id,name,balance);
			list.add(a);
		}
		//3.关闭资源
		rawQuery.close();
		readableDatabase.close();
		return list;
	}
	//七:分页查询:传入要查询第几页,每页显示几条数据,将查询到的数据放在list集合中返回 
	public List<Account> queryPage(int pageNum,int pageSize){
		List<Account> list = new ArrayList<Account>();
		Account a = null;
		String index = String.valueOf((pageNum-1)*pageSize);
		String count = String.valueOf(pageSize);
		//1.获取相应的(可读的)数据库
		SQLiteDatabase readableDatabase = mySQLiteOpenHelper.getReadableDatabase();
		//2.执行相应的查询语句
		Cursor rawQuery = readableDatabase.rawQuery("select * from account limit ?,?", new String[]{index,count});
		while(rawQuery.moveToNext()){
			Integer id = Integer.valueOf(rawQuery.getString(rawQuery.getColumnIndex("_id")));
			String name = rawQuery.getString(rawQuery.getColumnIndex("name"));
			Integer balance = Integer.valueOf(rawQuery.getString(rawQuery.getColumnIndex("balance")));
			a = new Account(id,name,balance);
			list.add(a);
		}
		//3.关闭相应的资源
		rawQuery.close();
		readableDatabase.close();
		return list;
	}
	//八:查询总记录条数
	public int queryCount(){
		//1.获取相应的(可读的)数据库
		SQLiteDatabase readableDatabase = mySQLiteOpenHelper.getReadableDatabase();
		//2.执行相应的语句
		Cursor rawQuery = readableDatabase.rawQuery("select count(*) from account", null);
		rawQuery.moveToNext();//不加此句可否?不能去掉!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		int count = rawQuery.getInt(0);
		//3.关闭资源
		rawQuery.close();
		readableDatabase.close();
		return count;
	}
	//九:事物管理  从一个Account对象向另一个Account对象汇款,传入参数,fromid,toId,moneySize
	public void remit(int fromId,int toId,int moneySize){
		SQLiteDatabase writableDatabase = null;
		try {
			//1.获取相应的(可写的)数据库
			writableDatabase = mySQLiteOpenHelper.getWritableDatabase();
			//2.开启事物
			writableDatabase.beginTransaction();
			//3.执行相应的语句
			writableDatabase.execSQL("update account set balance=balance-? where _id = ?", new Object[]{moneySize,fromId});
			writableDatabase.execSQL("update account set balance=balance+? where _id = ?",new Object[]{moneySize,toId});
			//4.设置成功标记
			writableDatabase.setTransactionSuccessful();
			//5.关闭资源
			writableDatabase.close();
		} catch (Exception e) {
			//6.结束事务,会把最后一次成功标记之前的事务提交
			writableDatabase.endTransaction();
			e.printStackTrace();
		}
		
	}
}

 

三:对CRUD的方法的测试:

 

package com.itcode.mysqlite;


import java.util.List;
import java.util.Random;

import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;


public class SQLiteTest extends AndroidTestCase{
	//1.测试创建数据库的方法
	public void testCreateDB(){
		//1.创建数据库
		MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext());
		//2.得到相应的数据库
		SQLiteDatabase db = helper.getWritableDatabase();
		db.execSQL("INSERT INTO account(_id,name, balance) VALUES(1,'fuck', 10000)");

		
	}
	
	//2.测试添加数据的方法
	public void testAdd(){
		AccountDao dao = new AccountDao(getContext());// Context android.test.AndroidTestCase.getContext()
		for(int i=1;i<100;i++){
			dao.add(new Account("Test" + i,new Random().nextInt(10000)));
		}
	}
	//3.测试删除数据的方法
	public void testDelete(){
		AccountDao dao = new AccountDao(getContext());
		for(int i=100;i<200;i++){
			dao.delete(i);
		}
	}
	//4.测试修改数据的方法
	public void testUpdate(){
		AccountDao dao = new AccountDao(getContext());
		Account a = new Account(1,"fuck you!!!~",999);
		dao.update(a);
	}
	//5.测试查询数据的方法,根据id查询数据库
	public void testQuery(){
		AccountDao dao = new AccountDao(getContext());
		System.out.println(dao.query(1));
		System.out.println(dao.query(3));
		System.out.println(dao.query(4));
	}
	//6.测试查询所有的方法
	public void testQueryAll(){
		AccountDao dao = new AccountDao(getContext());
		List<Account> list =null;
		list = dao.queryAll();
		for (Account account : list) {
			System.out.println(account);
		}
	}
	//7.测试分布查询的方法
	public void testQueryPage(){
		AccountDao dao = new AccountDao(getContext());
		List<Account> list = null;
		list = dao.queryPage(2, 10);
		for (Account account : list) {
			System.out.println(account);
		}
	}
	//8.测试查询总记录条数的方法
	public void testQueryCount(){
		AccountDao dao = new AccountDao(getContext());
		int count = dao.queryCount();
		System.out.println(count);
	}
}


 

转载于:https://www.cnblogs.com/james1207/p/3331277.html

相关文章:

  • VAR_LIGHT_MAP_UV语义
  • [置顶] 数据库开发常识
  • 数据结构中三表合一的实现
  • 雷电
  • CSLA - 介绍以及学习资料
  • 软粒子
  • gamma空间
  • python中库引用与import
  • 一道有趣的面试题
  • msg to msg
  • sql sever 触发器的概念和使用
  • unity——OnRenderImage深度解读
  • LOD and Reflections Adding Details
  • C-Lodop提示Access violation at address ...in module 'CLodopPrint32.exe' write of address
  • jQuery get post 碎片(远程html)加载
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • go append函数以及写入
  • HTTP那些事
  • java小心机(3)| 浅析finalize()
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Promise初体验
  • Vue 2.3、2.4 知识点小结
  • 检测对象或数组
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 面试总结JavaScript篇
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​2021半年盘点,不想你错过的重磅新书
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (4)事件处理——(7)简单事件(Simple events)
  • (JS基础)String 类型
  • (补)B+树一些思想
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (一)VirtualBox安装增强功能
  • (转)大型网站架构演变和知识体系
  • (转载)虚函数剖析
  • ./configure,make,make install的作用(转)
  • .bat文件调用java类的main方法
  • .NET 依赖注入和配置系统
  • .Net各种迷惑命名解释
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET文档生成工具ADB使用图文教程
  • .NET中使用Redis (二)
  • @Pointcut 使用
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [20161101]rman备份与数据文件变化7.txt
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C++参考]拷贝构造函数的参数必须是引用类型
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue