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

SQLite数据库存储数据

SQLite数据库存储数据的时候,首先必须继承SQLiteOpenHelper类:[java]viewplaincopyprint?publicclassDbOpenHelperextend

SQLite数据库存储数据的时候,首先必须继承SQLiteOpenHelper类:

[java] view plaincopyprint?
  1. public class DbOpenHelper extends SQLiteOpenHelper {  
  2.   
  3.         public DbOpenHelper(Context context) {  
  4.         /* 
  5.          * 一般是当DbOpenHelper类调用getReadableDatabase() 
  6.          * 或者getWritableDatabase()方法的时候,会创建数据库 
  7.          * 此方法中的四个参数分别代表: 
  8.          * context: 上下文对象 
  9.          * name: 数据库的名称 
  10.          * CursorFactory: 游标工厂,为null的时候,表示使用android系统默认的游标工厂 
  11.          * version: 代表版本 
  12.          */  
  13.         super(context, "andy.db"null2);  
  14.     }  
  15.   
  16.     /* 
  17.      * 这个方法是当数据库创建之后,就会立即调用, 
  18.      * 所以一般在这个方法中,会实现创建数据库的表 
  19.      */  
  20.     @Override  
  21.     public void onCreate(SQLiteDatabase db) {  
  22.         db.execSQL("create table person(id integer primary key autoincrement, name varchar(20), age integer)");  
  23.     }  
  24.   
  25.     /* 
  26.      * 这个方法是在当数据库中的对应的数据库的版本发生变化的时候会被立即调用 
  27.      * 即是如果当已经存在数据库的时候,当构造方法中的第四个参数比数据库原先的版本号大的时候,会被调用 
  28.      * 所以可以在这个方法中处理一些,像向数据库中的表中添加一个参数 
  29.      */  
  30.     @Override  
  31.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  32.         db.execSQL("alter table person add phone varchar(12) null");  
  33.     }  
  34.   
  35. }  


之后,对数据库进行操作:

[java] view plaincopyprint?
  1. public class PersonService {  
  2.     private DbOpenHelper helper;  
  3.   
  4.     public PersonService(Context context) {  
  5.         helper = new DbOpenHelper(context);  
  6.     }  
  7.   
  8.     //向数据库中增加数据  
  9.     public void addData(Person person) {  
  10.         SQLiteDatabase db = helper.getWritableDatabase();  
  11.         db.execSQL("insert into person (name, age, phone) values (?, ?, ?)",  
  12.                 new Object[] { person.getName(), person.getAge(), person.getPhone() });  
  13.     }  
  14.   
  15.     //从数据库中删除数据  
  16.     public void deleteData(Integer id) {  
  17.         SQLiteDatabase db = helper.getWritableDatabase();  
  18.         db.execSQL("delete from person where id = ?"new Object[] { id });  
  19.     }  
  20.   
  21.     //往数据库中更新数据  
  22.     public void updateData(Person person) {  
  23.         SQLiteDatabase db = helper.getWritableDatabase();  
  24.         db.execSQL("update person set name=?,age=?,phOne=? where id = ?",  
  25.                 new Object[] { person.getName(), person.getAge(), person.getPhone(), person.getId() });  
  26.     }  
  27.   
  28.     //查找数据库中的数据  
  29.     public Person checkData(Integer id) {  
  30.         SQLiteDatabase db = helper.getReadableDatabase();  
  31.         Cursor cursor = db.rawQuery("select * from person where id = ?",  
  32.                 new String[] { id.toString() });  
  33.         if (cursor.moveToFirst()) {  
  34.             int personid = cursor.getInt(cursor.getColumnIndex("id"));  
  35.             String name = cursor.getString(cursor.getColumnIndex("name"));  
  36.             String phone = cursor.getString(cursor.getColumnIndex("phone"));  
  37.             short age = cursor.getShort(cursor.getColumnIndex("age"));  
  38.             if(cursor != null)  
  39.                 cursor.close();  
  40.             return new Person(personid, name, phone, age);  
  41.         }  
  42.         return null;  
  43.     }  
  44.   
  45.     //查找数据库中的person表中的数据的数目  
  46.     public int getCount() {  
  47.         SQLiteDatabase db = helper.getReadableDatabase();  
  48.         Cursor cursor = db.rawQuery("select count(*) from person"null);  
  49.         cursor.moveToFirst();  
  50.         int count = cursor.getInt(0);  
  51.           
  52.         if(cursor != null)  
  53.             cursor.close();  
  54.           
  55.         return count;  
  56.     }  
  57.   
  58.     /* 
  59.      * 分页,就是取出数据库中跳过offset条数据的maxCount条数据, 
  60.      * offset代表跳过的数据的条数,如3,表示跳过3条,从第四条开始取数据 
  61.      * maxCount代表要取出的数据的条数 
  62.      */  
  63.     public List getScrollData(int offset, int maxCount) {  
  64.         List persons = new ArrayList();  
  65.           
  66.         SQLiteDatabase db = helper.getReadableDatabase();  
  67.         Cursor cursor = db.rawQuery("select * from person limit ?,?",  
  68.                 new String[]{String.valueOf(offset), String.valueOf(maxCount)});  
  69.           
  70.         while(cursor.moveToNext()){  
  71.             int personid = cursor.getInt(cursor.getColumnIndex("id"));  
  72.             String name = cursor.getString(cursor.getColumnIndex("name"));  
  73.             String phone = cursor.getString(cursor.getColumnIndex("phone"));  
  74.             short age = cursor.getShort(cursor.getColumnIndex("age"));  
  75.             persons.add(new Person(personid, name, phone, age));  
  76.         }  
  77.           
  78.         if(cursor != null){  
  79.             cursor.close();  
  80.         }  
  81.         return persons;  
  82.     }  
  83. }  


之后,通过单元测试来测试所编写的数据库代码:

[java] view plaincopyprint?
  1. public class DbOpenHelperTest extends AndroidTestCase {  
  2.     private final static String TAG = "DbOpenHelperTest";  
  3.       
  4.     public void testCreateDatabase() throws Throwable{  
  5.         DbOpenHelper helper = new DbOpenHelper(this.getContext());  
  6.         helper.getWritableDatabase();  
  7.     }  
  8.       
  9.     public void testAddData() throws Throwable{  
  10.         PersonService service = new PersonService(this.getContext());  
  11.           
  12.         Person person = new Person();  
  13.         person.setName("hanmeimei");  
  14.         person.setAge((short)12);  
  15.         person.setPhone("12738487675");  
  16.         service.addData(person);  
  17.           
  18.         person.setName("lilei");  
  19.         person.setAge((short)15);  
  20.         person.setPhone("1273834275");  
  21.         service.addData(person);  
  22.           
  23.         person.setName("mingming");  
  24.         person.setAge((short)34);  
  25.         person.setPhone("12737857675");  
  26.         service.addData(person);  
  27.           
  28.         person.setName("lile");  
  29.         person.setAge((short)32);  
  30.         person.setPhone("12783947675");  
  31.         service.addData(person);  
  32.           
  33.         person.setName("mashan");  
  34.         person.setAge((short)22);  
  35.         person.setPhone("12709847675");  
  36.         service.addData(person);  
  37.     }  
  38.       
  39.     public void testDeleteData() throws Throwable{  
  40.         PersonService service = new PersonService(this.getContext());  
  41.         service.deleteData(1);  
  42.     }  
  43.       
  44.     public void testUpdateData() throws Throwable{  
  45.         PersonService service = new PersonService(this.getContext());  
  46.         Person person = service.checkData(3);  
  47.         person.setName("linsan");  
  48.         service.updateData(person);  
  49.     }  
  50.       
  51.     public void testCheckData() throws Throwable{  
  52.         PersonService service = new PersonService(this.getContext());  
  53.         Person person = service.checkData(3);  
  54.           
  55.         Log.d(TAG, person.toString());  
  56.     }  
  57.       
  58.     public void testGetCount() throws Throwable{  
  59.         PersonService service = new PersonService(this.getContext());  
  60.         int count = service.getCount();  
  61.         Log.d(TAG, "count = " + count);  
  62.     }  
  63.       
  64.     public void testGetScrollData() throws Throwable{  
  65.         PersonService service = new PersonService(this.getContext());  
  66.         List persons = service.getScrollData(05);  
  67.         for(Person person : persons){  
  68.             Log.d(TAG, person.toString());  
  69.         }  
  70.     }  
  71. }  

推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • SQLite–CONSTRAINTS(约束)约束是数据列在表上执行的规则。这些是用来限制的数据类型可以进入一个表。这样可以确保数据的准确性和可靠性在数据库中。    级或表级约束可 ... [详细]
  • 有没有人用过sqlite?关于tablehasnocolumnnamedcolumn插入数据的时候报上边的错。问题是我明明有这一列。直接在sqlitedevoloper里执 ... [详细]
  • Easyui + asp.net mvc + sqlite 开发教程(录屏)适合入门
    第一节:前言(技术简介)EasyUI是一套js的前端框架利用它可以快速的开发出好看的前端系统web它是在jquery的框架基础上面现在越来越多的企业用它来开发web系统 ... [详细]
  • iOS关于移动端SQLite,你想知道的都有
    一、SQLite简介SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了MVP架构模式及其在国庆技术博客中的应用。MVP架构模式是一种演变自MVC架构的新模式,其中View和Model之间的通信通过Presenter进行。相比MVC架构,MVP架构将交互逻辑放在Presenter内部,而View直接从Model中读取数据而不是通过Controller。本文还探讨了MVP架构在国庆技术博客中的具体应用。 ... [详细]
  • Tkinter Frame容器grid布局并使用Scrollbar滚动原理
    本文介绍了如何使用Tkinter实现Frame容器的grid布局,并通过Scrollbar实现滚动效果。通过将Canvas作为父容器,使用滚动Canvas来滚动Frame,实现了在Frame中添加多个按钮,并通过Scrollbar进行滚动。同时,还介绍了更新Frame大小和绑定滚动按钮的方法,以及配置Scrollbar的相关参数。 ... [详细]
  • 涉及的知识点-ViewGroup的测量与布局-View的测量与布局-滑动冲突的处理-VelocityTracker滑动速率跟踪-Scroller实现弹性滑动-屏幕宽高的获取等实现步 ... [详细]
  • 在Android Studio中查看SQLite数据库
    原来查看数据库内容,我们一般都是将数据库文件从手机导出,再用专门的软件打开查看,比较繁琐。最近发现了一个比较方便的方法:使用工具stetho。使用方式在gradle中配置depen ... [详细]
  • Python使用SQLite1.sqlite3的安装python2.5.x以上版本默认自带sqlite3模块。2.链接sqlite3数据库```#导入sqlite3模块import ... [详细]
  • 背景使用sqlite3的命令实现数据去重,与无效数据删除等操作。所有操作均封装在shellscript中。创建数据库邮件数据库:UserEmail.dbEmail表:TABLE_EM ... [详细]
  • 只需在建表的时候指定类型:INTEGERPRIMARYKEYAUTOINCREMENT然后在存入数据的时候不设置其值(或设置为null)即可。如建表:[sql]viewpla ... [详细]
  • 对于很多想做通讯录,或者很多想对系统通讯录操作的童鞋们肯定都会遇到个问题,系统通讯录操作很麻烦,我能不能直接看看底层联系人表结构呢?如果可以看到的话,那一定能提高相关操作的准确性和效率吧。  不多说, ... [详细]
author-avatar
蜜小嘟_546
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有