文档章节

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

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 1061
阅读 6
收藏 0
点赞 2
评论 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数据库高手秘籍:SQLite命令

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

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

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

Erichkko
2015/08/28
0
0
Android数据的四种存储方式之二——SQLite

SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是:     NULL: 空值     INTEGER: 整数     REAL: 浮点数     TEXT: 字符串     BLOB: 大...

Airship
2015/03/25
0
0
手机开发-如何查看android数据文件和数据库

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

娶到笨笨
2014/03/14
0
0
Android数据的四种存储方式(二) —— SQLite

ContentValues主要是存放表中的数据段,以及其对应的值,与Hashtable一样采用名值对的形式存储,但是它存储的名值对中,名是一个String类型,值是基本数据类型。 其使用示例如下: ContentV...

的书法上的
2014/06/12
0
0
Eclipse调试Android工具集锦之四-SQLITE3

原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6689922 本文章的前提:已经安装了Eclipse和ADT。android SDK也下载完毕。Eclipse里面已经设置好了andro本...

simpower
2014/10/09
0
0
【转】值得推荐的android开发框架简介

第一个:Afinal 项目地址:https://github.com/yangfuhai/afinal 功能:一个android的ioc,orm框架,内置了四大模块功 能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivi...

kymjs张涛
2014/08/05
0
0
Android数据的四种存储方式之三——SharedPreferences

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences 除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质...

Airship
2015/03/25
0
0
Android数据的四种存储方式之一——总览

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览 作为一个完成的应用程序,数据存储操作是必不可少的。因此,Android系统一共提供了四种数据...

Airship
2015/03/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jquery刷新页面(局部及全页面刷新)

window.location.reload()刷新当前页面. parent.location.reload()刷新父亲对象(用于框架) opener.location.reload()刷新父窗口对象(用于单开窗口) top.location.reload()刷新最顶端对象...

uug
4分钟前
0
0
CoreText进阶(五)- 文字排版样式和效果

CoreText进阶(五)- 文字排版样式和效果 效果 以下是三个设置了不同属性的效果图 第一个设置了文字颜色为红色,字体为16号 第二个设置了文字颜色为灰色,字体为16号,对其为居中 第三个设置...

aron1992
30分钟前
1
0
10.23 linux任务计划cron~10.27 target介绍

crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是...

洗香香
40分钟前
0
0
告警系统主脚本、告警系统配置文件、告警系统监控项目

20.20 告警系统主脚本 告警系统主脚本 main.sh内容 #!/bin/bash#Written by aming.# 是否发送邮件的开关export send=1# 过滤ip地址export addr=`/sbin/ifconfig |grep -A1 "en...

lyy549745
44分钟前
0
0
Don’t Repeat Yourself

在软件工程中,Don’t Repeat Yourself(DRY)是软件开发的原则,旨在减少重复,用抽象代替它,使用数据规范化来避免冗余。 这个原则在维基百科上是说是由Andy Hunt和Dave Thomas《The Pragmat...

woshixin
46分钟前
0
0
搭建webpack项目框架

作者:汪娇娇 时间:2018年6月4日 一、说明 随着业务发展和前端人员的增加,搭建一个通用框架以及制定统一规范就成了必然。对于选型这方面,一开始好像就没考虑其他框架,直接选了webpack。w...

娇娇jojojo
53分钟前
0
0
Java基础——面向对象(内部类)

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 内部类: 1.有名内部类 2.无名内部类 内部类申请...

凯哥学堂
今天
0
0
HttpClient内部三个超时时间的区别

RequestConfig requestConfig = RequestConfig.custom() .setConnectionRequestTimeout(config.connReqTimeout) //从连接池中获取连接的超时时间 ......

1713716445
今天
0
0
每天一个命令SCP

每天一个命令:SCP scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速...

河图再现
今天
0
0
cron/chkconfig/systemd/unit/target

linux任务计划 : cron工具 任务计划在运维工作中用到的比较多,大部分系统管理工作都是通过定期自动执行某个脚本来完成。 查看linux中任务计划的配置文件: /etc/crontab [root@yolks-001 ~]...

Hi_Yolks
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部