文档章节

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
上海
后端工程师
私信 提问
Kotlin入门(26)数据库ManagedSQLiteOpenHelper

共享参数毕竟只能存储简单的键值对数据,如果需要存取更复杂的关系型数据,就要用到数据库SQLite了。尽管SQLite只是手机上的轻量级数据库,但它麻雀虽小、五脏俱全,与Oracle一样存在数据库的...

aqi00
10/19
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 Studio 通过一个登录功能介绍SQLite数据库的使用

前言: SQLite简介:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很...

AnneHan
09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL 数据库中间件 MyCAT 基础解析

前言 网络应用持续扩张的过程中,为了处理海量数据往往首先遇到的挑战就是数据存储的扩展 数据存储的扩展一般以切分来实现,切分的技术实现又可分为垂直切分和水平切分: 以表(或Schema)为切...

PeakFang-BOK
24分钟前
0
0
Linux Mysql 安装

https://www.cnblogs.com/xinjing-jingxin/p/8025805.html

流氓兔-
50分钟前
0
0
GlusterFS强制删除节点

GlusterFS中,修改了节点名称,导致找不到了,想删除掉重新加入。 没想到,gluster peer detach server02方法失败,竟然用了各种方法都删除不掉,提示节点无效(废话!有效的我还要删除么?!...

openthings
56分钟前
2
0
光纤技术取得突破,互联网速度或可提高100倍

据外媒报道,近日发表在《自然通讯》上的一篇文章称,通过检测扭曲成螺旋状的光线,互联网速度可以提高 100 倍。这项研究可用于轻松升级现有的网络,大幅提高传输效率。 光纤线缆使用光脉冲来...

linux-tao
今天
1
0
day150-2018-11-17-英语流利阅读-待学习

歪果仁也疯狂:海外版抖音的征途 毛西 2018-11-17 1.今日导读 海外版抖音 TikTok 于 2017 年 5 月上线海外,至今覆盖全球 150 多个国家和地区,月活跃用户数已突破 5 亿。然而,“出海”的抖...

飞鱼说编程
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部