为什么80%的码农都做不了架构师?>>>   

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}//数据库第一次被创建的时候调用@Overridepublic 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)@Overridepublic 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目录下)

转载于:https://my.oschina.net/zjcx/blog/679581

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

  1. Android 绿豆通讯录【SQLite数据库---数据库(增删改查、展示数据)】

    前情提要:Android 数据库(SQLite) [简介.创建.使用(增删改查.事务.实战演练).数据显示控件(ListView.Adapter.实战演练-绿豆通讯录)] https://blog.c ...

  2. android绿豆通讯录xml,Android 绿豆通讯录【SQLite数据库---数据库(增删改查、展示数据)】...

    前情提要:Android 数据库(SQLite) [简介.创建.使用(增删改查.事务.实战演练).数据显示控件(ListView.Adapter.实战演练-绿豆通讯录)] https://blog.c ...

  3. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 1 Public static void main(String[] arg ...

  4. sqlite数据库的基本增删改查操作

    2019独角兽企业重金招聘Python工程师标准>>> 效果图示例 1.在清单里添加相应的权限 <uses-permission android:name="andr ...

  5. 实现简单的增删改查(Asp.Net MVC+Layui)

    实现简单的增删改查(Asp.Net MVC+Layui) 一.页面效果 二.前期准备 1.新建项目 2. 在项目中新建文件夹(设置mvc的雏形) 3.连接数据库(SqlServer) JdbcUtil ...

  6. Springboot整合JDBC和DBUtils,实现简单的增删改查.

    Springboot整合JDBC和DBUtils,实现简单的增删改查. 一.pom.xml文件 <?xml version="1.0" encoding="UTF- ...

  7. JOOQ初学-简单的增删改查demo

    初学JOOQ,写个blog为了mark一下,也方便大家交流.直接上代码了.在网上搜不到太详细的demo和文档,都是英文的.哎,忧桑...在这里写几个demo,大家看看,有不足望指教. 初步的数据库连接 ...

  8. Struts2 注解开发实现简单的增删改查,超详细教程

    声明:此文是原创,如果需要转载请注明出处:https://blog.csdn.net/hunter_max/article/details/80575542 上一篇博客<Struts2 注解开发 ...

  9. PHP操作Mysql简单的增删改查

    PHP操作Mysql简单的增删改查 今天晚上回想了一下php怎么操作mysql,突然发现都忘了,然后通过回忆,搜寻资料总结了以下几点,一是提醒自己不要忘了,再就是希望能帮助一些有帮助的朋友.大佬请路过 ...

最新文章

  1. “元宇宙”概念引发AR/VR新一轮投资潮,去年Q4融资总额达120亿,超过此前2年总和...
  2. html转盘游戏,html5大转盘抽奖实例源码(基于vue.js)
  3. 洛谷P1420 最长连号
  4. 从数组到流再到Java 8
  5. Netty技术细节源码分析-内存池之PoolChunk设计与实现
  6. 十八般武艺玩转GaussDB(DWS)性能调优:总体调优策略
  7. FJ集团企业级邮件服务器——Exchange服务器安装与配置(边缘传输服务器)
  8. 2014-07-24 .NET实现微信公众号的消息回复与自定义菜单
  9. sql server 左右连接 内外连接
  10. bootstrap java web_JavaWEB开发05_Bootstrap
  11. 计算机中丢失了gdiplus.dll,解决 “计算机中丢失gdiplus.dll”
  12. oracle卸载报错,oracle卸载
  13. 【老生谈算法】matlab实现K均值聚类算法——K均值聚类算法
  14. 网络协议和标准——IEEE802
  15. 《JavaScript权威指南第7版》第11章 JavaScript标准库
  16. 10段世界最美的英语美文
  17. 从高可用IP代理池到千万级网易云音乐数据爬取的实现
  18. 用Faiss实现一个人脸检索
  19. vue2.0 唤起百度地图app_今天不谈哪个导航好!百度高德二合一APP体验
  20. vue+eChart实现省份地图

热门文章

  1. linux 中输入一个c程序,从c源程序到Linux可执行代码的过程
  2. 张恩民 php,php100视频教程第11讲(制作PHP+MYSQL留言板 上)中,张恩民老师提到的php100-11.txt文档...
  3. aix解压tgz_AIX 上压缩与解压缩 各种文件格式原理说明
  4. SpringBoot--Druid多数据源配置
  5. 智能车竞赛技术报告 | 节能信标组-哈尔滨工业大学紫丁香五队
  6. BPW-21光电二极管的特性测试
  7. PN结中存在的Boltzmann常数
  8. 学校通知,本学期不用返校了
  9. 单击“登录”后,用户名和密码显示在地址栏中,不安全
  10. mysql自然连接和等值连接_mysql sql99语法 内连接等值连接