热门标签 | 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});}
}


推荐阅读
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 原文地址:https:blog.csdn.netqq_35361471articledetails84715491原文地址:https:blog.cs ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • 本文探讨了在一个使用Mongoid框架的项目中,如何处理当HABTM(has_and_belongs_to_many)关系中的逆向关联设置为nil时,子对象无法正确持久化的问题。 ... [详细]
  • 在尝试使用 Android 发送 SOAP 请求时遇到错误,服务器返回 '无法处理请求' 的信息,并指出某个值不能为 null。本文探讨了可能的原因及解决方案。 ... [详细]
  • flea,frame,db,使用,之 ... [详细]
  • 本文详细介绍了`android.os.Binder.getCallingPid()`方法的功能和应用场景,并提供了多个实际的代码示例。通过这些示例,开发者可以更好地理解如何在不同的开发场景中使用该方法。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文详细介绍了 Java 中 org.w3c.dom.Node 类的 isEqualNode() 方法的功能、参数及返回值,并通过多个实际代码示例来展示其具体应用。此方法用于检测两个节点是否相等,而不仅仅是判断它们是否为同一个对象。 ... [详细]
  • 本文详细介绍了Java库com.powsybl.afs.storage中的NodeGenericMetadata.getBooleans()方法,并提供了多个实际应用的代码示例。 ... [详细]
  • JavaScript 实现图片文件转Base64编码的方法
    本文详细介绍了如何使用JavaScript将用户通过文件输入控件选择的图片文件转换为Base64编码字符串,适用于Web前端开发中图片上传前的预处理。 ... [详细]
  • 本文深入探讨了Java枚举类型的使用与实践,详细解析了枚举的基本用法及其在实际开发中的应用。首先介绍了枚举作为常量的替代方案,自JDK 1.5起,通过枚举可以更加简洁、安全地定义常量,避免了传统方式中可能出现的错误。此外,文章还探讨了枚举在实现单例模式、状态机等场景中的优势,并提供了多个实际案例,帮助开发者更好地理解和运用这一强大的语言特性。 ... [详细]
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社区 版权所有