文档章节

android连接sqlite进行简单的增删改查和事务管理

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 1061
阅读 6
收藏 0

Android连接数据库sqlite并进行简单的表创建和增删改查功能参考代码,使用Android单元测试进行验证,首先新建项目进行配置单元测试环境请参考博客:http://blog.csdn.net/bq1073100909/article/details/37885457

项目资源目录图:



Person.java代码:(实体类)

package org.dyb.domain;

public class Person {
	private Integer personid;
	private String name;
	private String phone;
	public Person(){}
	public Person(String name,String phone){
		this.name=name;
		this.phone=phone;
	}
	public Person(Integer personid,String name,String phone){
		this.personid=personid;
		this.name=name;
		this.phone=phone;
	}
	public Integer getPersonid() {
		return personid;
	}
	public void setPersonid(Integer personid) {
		this.personid = personid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	
}

DBOpenHelper.java 继承SQLiteOpenHelper抽象类,实现数据库的连接和创建表


package org.dyb.service;

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

public class DBOpenHelper extends SQLiteOpenHelper {

	public DBOpenHelper(Context context) {
		//参数说明:第二个是数据库文件名称,第三个是游标工厂,第四个是版本号
		super(context, "dyb.db", null, 2);//默认放在<包>/databases
	}
	
	//数据库第一次被创建的时候调用
	@Override
	public void onCreate(SQLiteDatabase db) {
		String sql="create table person(personid integer primary key autoincrement,name varchar(20))";
		db.execSQL(sql);
	}
	
	//super(context, "dyb.db", null, 1);数据库文件的版本号发生变更的时候调用(例如把上面1修改为2)
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		String sql="alter table person add phone varchar(12) null";
		db.execSQL(sql);
	}
}

对表内容进行增删改查:

PersonService.java代码如下:

package org.dyb.service;

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

import org.dyb.domain.Person;

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

public class PersonService {
	private DBOpenHelper dbOpenHelper;
	public PersonService(Context context){
		this.dbOpenHelper=new DBOpenHelper(context);
	}
	/**
	 * 保存用户
	 * @param person
	 */
	public void save(Person person){
		SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
		String sql="insert into person(name,phone) values(?,?)";
		db.execSQL(sql,new Object[]{person.getName(),person.getPhone()});
		db.close();
	}
	/**
	 * 删除用户
	 * @param id
	 */
	public void delete(Integer id){
		SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
		String sql="delete from person where personid=?";
		db.execSQL(sql,new Object[]{id});
		db.close();
	}
	/**
	 * 更新用户
	 * @param person
	 */
	public void update(Person person){
		SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
		String sql="update person set name=?,phone=? where personid=?";
		db.execSQL(sql,new Object[]{person.getName(),person.getPhone(),person.getPersonid()});
	}
	/**
	 * 通过ID查找用户 
	 * @param id
	 * @return
	 */
	public Person find(Integer id){
		SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
		String sql="select * from person where personid=?";
		Cursor cursor = db.rawQuery(sql, new String[]{id.toString()});
		if(cursor.moveToFirst()){
			int personid = cursor.getInt(cursor.getColumnIndex("personid"));
			String name = cursor.getString(cursor.getColumnIndex("name"));
			String phone = cursor.getString(cursor.getColumnIndex("phone"));
			return new Person(personid,name,phone);
		}
		cursor.close();
		return null;
	}
	/**
	 * 分页查询
	 * @param offset 跳过前面多少条记录
	 * @param maxResult 每页获取多少条记录
	 * @return
	 */
	public List<Person> getScrollData(int offset,int maxResult){
		List<Person> persons=new ArrayList<Person>();
		SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
		String sql="select * from person order by personid asc limit ? offset ?";
		Cursor cursor=db.rawQuery(sql, new String[]{String.valueOf(maxResult),String.valueOf(offset)});
		while(cursor.moveToNext()){
			int personid = cursor.getInt(cursor.getColumnIndex("personid"));
			String name = cursor.getString(cursor.getColumnIndex("name"));
			String phone = cursor.getString(cursor.getColumnIndex("phone"));
			persons.add(new Person(personid,name,phone));
		}
		return persons;
	}
	/**
	 * 得到数据库数据总个数
	 * @return
	 */
	public long getCount(){
		SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
		String sql="select count(*) from person ";
		Cursor cursor = db.rawQuery(sql, null);
		cursor.moveToFirst();
		long result=cursor.getLong(0);
		return result;
	}
	/**
	 * 事务测试,同时执行成功提交事务
	 */
	public void updateTransaction()throws Exception{
		SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
		Person person1=this.find(1);
		person1.setName("x1");
		Person person2=this.find(2);
		person2.setName("x2");
		db.beginTransaction();//事务开启
		try{
			this.update(person1);
			this.update(person2);
			db.setTransactionSuccessful();//设置事务成功,这样关闭事务时候会提交数据
		}finally{
			db.endTransaction();//如果事务成功提交事务 否则回滚
		}
		db.close();
	}
	
	public DBOpenHelper getDbOpenHelper() {
		return dbOpenHelper;
	}
	public void setDbOpenHelper(DBOpenHelper dbOpenHelper) {
		this.dbOpenHelper = dbOpenHelper;
	}
	
}

单元测试类 PersonServiceTest.java代码如下:

package org.dyb.test;

import java.util.List;
import org.dyb.domain.Person;
import org.dyb.service.DBOpenHelper;
import org.dyb.service.PersonService;
import android.test.AndroidTestCase;
import android.util.Log;

public class PersonServiceTest extends AndroidTestCase {
	public void testCreateDB()throws Exception{
		DBOpenHelper dbOpenHelper=new DBOpenHelper(getContext());
		dbOpenHelper.getWritableDatabase();
	}
	
	public void testSave()throws Exception{
		PersonService personService=new PersonService(this.getContext());
		for(int i=0;i<20;i++){
			Person person=new Person("zhangsan"+i,"123456789");
			personService.save(person);
		}
	}
	
	public void testUpdate()throws Exception{
		PersonService personService=new PersonService(this.getContext());
		Person person = personService.find(1);
		person.setName("lisi");
		personService.update(person);
	}
	
	public void testDelete()throws Exception{
		PersonService personService=new PersonService(this.getContext());
		personService.delete(12);
	}
	
	public void testFind()throws Exception{
		PersonService personService=new PersonService(this.getContext());
		Person person = personService.find(3);
		Log.i("find", person.getName());
	}
	
	public void testScrollData()throws Exception{
		PersonService personService=new PersonService(this.getContext());
		List<Person> persons = personService.getScrollData(5, 4);
		for(Person per:persons){
			Log.i("fenye", per.getPersonid()+"");
		}
		
	}
	
	public void testCount()throws Exception{
		PersonService personService=new PersonService(this.getContext());
		Log.i("count",personService.getCount()+"");
	}
	/**
	 * 测试事务,只有两个更新都成功才提交事务
	 * @throws Exception
	 */
	public void testUpdateTransaction()throws Exception{
		PersonService personService=new PersonService(this.getContext());
		personService.updateTransaction();
	}
}

首先创建表,执行保存用户,id为1的name是zhangsan,然后执行更新测试,id为1的name是lisi,为了方便测试分页显示输出,循环添加数据,执行删除测试,删除掉id是12的用户,执行事务管理测试,把id是1和2的同时更新为x1和x2,事务提交。参考图如下:(我使用的是RE管理器打开的数据库文件dyb.db,数据库文件默认在项目包名的databases目录下)








本文转载自:http://blog.csdn.net/bq1073100909/article/details/37927267

共有 人打赏支持
指尖残雪
粉丝 7
博文 73
码字总数 0
作品 0
上海
后端工程师
不会点SQLite,都不好意思说自己是开发的

一、为什么要会点SQLite? SQLite作为一款轻量级的关系型数据库,占用的资源特别少,所以其应用场景也是特别的多。在移动开发中,我们经常会有将数据存储在本地的需求,此时SQLite将是我们最...

silencezwm
07/03
0
0
Android核心技术Intent和数据存储篇

女孩:上海站到了? 男孩:嗯呢?走向世界~ 女孩:Intent核心技术和数据存储技术? 男孩:对,今日就讲这个~ Intent是各个组件之间用来进行通信的,Intent的翻译为“意图”的意思,是传输数据...

达叔小生
07/29
0
0
Android数据库高手秘籍:SQLite命令

要想熟练地操作任何一个数据库,最最基本的要求就是要懂SQL语言,这也是每个程序员都应该掌握的技能。虽说SQL博大精深,要想精通确实很难,但最基本的一些建表命令,增删改查,大家还是必须要...

拉偶有所依
2015/07/01
0
0
Android开发SQLite的使用

在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面。本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的。 一.SQ...

Erichkko
2015/08/28
0
0
手机开发-如何查看android数据文件和数据库

在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看。android项目中的sqlite数据库位于/data/data/项目包/databases中。 工具/原料 doc命令adb工具,ecl...

娶到笨笨
2014/03/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL数据库集群-PXC方案

网盘下载地址 MySQL数据库集群-PXC方案 PXC是开源的MySQL集群技术,如中国移动、阿里巴巴、腾讯、去哪网等企业均采用或者借鉴了PXC解决方案,可见该方案具有极佳的稳定性。本课程将在Linux环...

qq__2304636824
13分钟前
1
0
vue脚手架搭建项目

npm install -g vue-clivue init webpack my-projectcd my-projectnpm run dev

帝子兮
16分钟前
2
0
es6 字符串拓展方法

es6 include();返回Boolean,该字符串是否包含该字符 startWith() 返回Boolean,该字符串开头是否是该字符 endWith() 返回Boolean,该字符串结尾是否是该字符 repeat() 重复该字符串多少次,...

莫西摩西
16分钟前
1
0
Java语言实现word转PDF(10分钟解决)

前言: 经常做OA办公项目的同学一定和我一样被各种线上的office操作整疯了。基本上涉及到Java操作office的时候就会想到POI和openoffice.这两种方案都是需要找各种jar包,然后用里面繁杂的api。...

山里的红杏
18分钟前
1
0
Flask部分源码阅读

Flask主要依赖于Werkzeug和Jinja这两个库,是很简洁的Python Web框架。 Werkzeug 是一个WSGI的工具包,是Flask的核心库。 Jinja 则是一个模板渲染的库,主要负责渲染返回给客户端的html文件。...

Jian_Ming
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部