热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLite数据库CRUD操作实例分析与应用

本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。

Person实体类

http://www.cnblogs.com/linjiqin/archive/2011/05/27/2059937.html

package com.ljq.domain;public class Person {private Integer id;private String name;private String phone;public Person() {super();}public Person(String name, String phone) {super();this.name = name;this.phone = phone;}public Person(Integer id, String name, String phone) {super();this.id = id;this.name = name;this.phone = phone;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}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数据库关联类

package com.ljq.db;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;public class DBOpenHelper extends SQLiteOpenHelper {// 类没有实例化,是不能用作父类构造器的参数,必须声明为静态
private static final String DBNAME = "ljq.db";private static final int VERSION = 1;// 第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,// 设置为null,代表使用系统默认的工厂类
public DBOpenHelper(Context context) {super(context, DBNAME, null, VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("CREATE TABLE PERSON (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME VARCHAR(20), PHONE VARCHAR(20))");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 注:生产环境上不能做删除操作
db.execSQL("DROP TABLE IF EXISTS PERSON"); onCreate(db);}
}

            

               

PersonService业务类

package com.ljq.db;import java.util.ArrayList;
import java.util.List;import android.content.Context;
import android.database.Cursor;import com.ljq.domain.Person;public class PersonService {private DBOpenHelper dbOpenHelper &#61; null;/*** 构造函数* * 调用getWritableDatabase()或getReadableDatabase()方法后&#xff0c;会缓存SQLiteDatabase实例&#xff1b;* 因为这里是手机应用程序&#xff0c;一般只有一个用户访问数据库&#xff0c;所以建议不关闭数据库&#xff0c;保持连接状态。* getWritableDatabase()&#xff0c;getReadableDatabase的区别是当数据库写满时&#xff0c;调用前者会报错&#xff0c;调用后者不会&#xff0c;* 所以如果不是更新数据库的话&#xff0c;最好调用后者来获得数据库连接。* * 对于熟悉SQL语句的程序员最好使用exeSQL(),rawQuery(),因为比较直观明了* * &#64;param context*/ public PersonService(Context context){dbOpenHelper &#61; new DBOpenHelper(context);}public void save(Person person){dbOpenHelper.getWritableDatabase().execSQL("insert into person(name, phone) values (?, ?)", new Object[]{person.getName(), person.getPhone()});}public void update(Person person){dbOpenHelper.getWritableDatabase().execSQL("update person set name&#61;?, phone&#61;? where id&#61;?", new Object[]{person.getName(), person.getPhone(), person.getId()});}public void delete(Integer... ids){if(ids.length>0){StringBuffer sb &#61; new StringBuffer();for(Integer id : ids){sb.append("?").append(",");}sb.deleteCharAt(sb.length() - 1);dbOpenHelper.getWritableDatabase().execSQL("delete from person where id in ("&#43;sb&#43;")", (Object[])ids);}}public Person find(Integer id){Cursor cursor &#61; dbOpenHelper.getReadableDatabase().rawQuery("select id, name, phone from person where id&#61;?", new String[]{String.valueOf(id)});if(cursor.moveToNext()){int personid &#61; cursor.getInt(0);String name &#61; cursor.getString(1);String phone &#61; cursor.getString(2);return new Person(personid, name, phone);}return null;}public long getCount(){Cursor cursor &#61; dbOpenHelper.getReadableDatabase().query("person", new String[]{"count(*)"}, null,null,null,null,null);if(cursor.moveToNext()){return cursor.getLong(0);}return 0;}/*** 分页* * &#64;param startResult 偏移量&#xff0c;默认从0开始* &#64;param maxResult 每页显示的条数* &#64;return*/public List<Person> getScrollData(int startResult, int maxResult){List<Person> persons &#61; new ArrayList<Person>();//Cursor cursor &#61; dbOpenHelper.getReadableDatabase().query("person", new String[]{"id, name, phone"}, // "name like ?", new String[]{"%ljq%"}, null, null, "id desc", "1,2");
Cursor cursor &#61; dbOpenHelper.getReadableDatabase().rawQuery("select * from person limit ?,?", new String[]{String.valueOf(startResult), String.valueOf(maxResult)});while(cursor.moveToNext()) {int personid &#61; cursor.getInt(0); String name &#61; cursor.getString(1);String phone &#61; cursor.getString(2);persons.add(new Person(personid, name, phone));}return persons;}}

             

                  

PersonServiceTest测试类

package com.ljq.test;import java.util.List;import com.ljq.db.PersonService;
import com.ljq.domain.Person;import android.test.AndroidTestCase;
import android.util.Log;public class PersonServiceTest extends AndroidTestCase{private final String TAG &#61; "PersonServiceTest";public void testSave() throws Exception{PersonService personService &#61; new PersonService(this.getContext());personService.save(new Person("zhangsan1", "059188893343"));personService.save(new Person("zhangsan2", "059188893343"));personService.save(new Person("zhangsan3", "059188893343"));personService.save(new Person("zhangsan4", "059188893343"));personService.save(new Person("zhangsan5", "059188893343"));}public void testUpdate() throws Exception{PersonService personService &#61; new PersonService(this.getContext());Person person &#61; personService.find(1);person.setName("linjiqin");personService.update(person);}public void testFind() throws Exception{PersonService personService &#61; new PersonService(this.getContext());Person person &#61; personService.find(1);Log.i(TAG, person.getName());}public void testList() throws Exception{PersonService personService &#61; new PersonService(this.getContext());List<Person> persons &#61; personService.getScrollData(0, 10);for(Person person : persons){Log.i(TAG, person.getId() &#43; " : " &#43; person.getName());}}public void testCount() :/span>throws Exception{PersonService personService &#61; new PersonService(this.getContext());Log.i(TAG, String.valueOf(personService.getCount()));}public void testDelete() throws Exception{PersonService personService &#61; new PersonService(this.getContext());personService.delete(1);}public void testDeleteMore() throws Exception{PersonService personService &#61; new PersonService(this.getContext());personService.delete(new Integer[]{2, 5, 6});}
}


推荐阅读
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 本文详细介绍了JSP的三大指令:page、include和taglib,重点探讨了静态包含与动态包含的区别及其应用场景,并解释了如何使用taglib指令引入第三方标签库。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 解决FCKeditor应用主题后上传问题及优化配置
    本文介绍了在Freetextbox收费后选择FCKeditor作为替代方案时遇到的上传问题及其解决方案。通过调整配置文件和调试工具,最终解决了上传失败的问题,并对相关配置进行了优化。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 异常要理解Java异常处理是如何工作的,需要掌握一下三种异常类型:检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常ÿ ... [详细]
  • 基于JQuery实现的评分插件
    本文介绍了一个使用JQuery创建的交互式评分控件。当用户将鼠标悬停在星星上时,左侧的星星会变为实心,右侧保持空心,并显示对应的评分等级;移开鼠标后,所有星星恢复为空心状态。 ... [详细]
  • 本文将探讨Java编程语言中对象和类的核心概念,帮助读者更好地理解和应用面向对象编程的思想。通过实际例子和代码演示,我们将揭示如何在Java中定义、创建和使用对象。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文介绍 SQL Server 的基本概念和操作,涵盖系统数据库、常用数据类型、表的创建及增删改查等基础操作。通过实例帮助读者快速上手 SQL Server 数据库管理。 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
author-avatar
Resolve
愿你的生活,既有软肋又有盔甲!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有