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

安卓中SQLite数据库操作学习

Android中内置的是SQLite小型数据库,类似access一样是以文件方式存在的,操作起来十分方便。android操作SQLite需要继承自SQLiteOpenHelper来得到

Android中内置的是SQLite小型数据库,类似access一样是以文件方式存在的,操作起来十分方便。android操作SQLite需要继承自SQLiteOpenHelper 来得到连接。实现了2个方法:onCreate和onUpgrade。第一次获得对数据库的读或写操作的时候调用onCreate,所以这里面写创建数据表的语句;在数据库版本变化的时候会调用onUpgrade,所以如果表结构变化了就在这里修改。

        下面的代码继承了SQLiteOpenHelper ,并且自己写了几个增删改查方法,将对数据库操作的DAO模块继承到一起,以后操作数据库用这一个java文件基本就OK啦。

[java] view plain copy
  1. package cn.itcast.service;  
  2.    
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.    
  6. import android.content.Context;  
  7. import android.database.Cursor;  
  8. import android.database.sqlite.SQLiteDatabase;  
  9. import android.database.sqlite.SQLiteOpenHelper;  
  10.    
  11. public class DBOpenHelper extends SQLiteOpenHelper {  
  12.     private static final String DATABASENAME = "test.db"//数据库名称  
  13.     private static final int DATABASEVERSION = 1;//数据库版本,大于0  
  14.    
  15.     public DBOpenHelper(Context context) {  
  16.         super(context, DATABASENAME, null, DATABASEVERSION);  
  17.     }  
  18.    
  19.     @Override  
  20.     public void onCreate(SQLiteDatabase db) {  
  21.         db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20), amount integer)");//执行有更改的sql语句  
  22.     }  
  23.    
  24.     @Override  
  25.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  26.         db.execSQL("DROP TABLE IF EXISTS person");  
  27.         onCreate(db);  
  28.     }  
  29.    
  30.     public void payment(){  
  31.         SQLiteDatabase db = getWritableDatabase();  
  32.         db.beginTransaction();//事启事务  
  33.         try{  
  34.             db.execSQL("update person set amount=amount-10 where persOnid=?"new Object[]{1});  
  35.             db.execSQL("update person set amount=amount+10 where persOnid=?"new Object[]{2});  
  36.             db.setTransactionSuccessful();//设置事务标志为成功,当结束事务时就会提交事务  
  37.         }finally{  
  38.             db.endTransaction();  
  39.         }  
  40.     }  
  41.    
  42.     public void save(Person person){  
  43.         //如果要对数据进行更改,就调用此方法得到用于操作数据库的实例,该方法以读和写方式打开数据库  
  44.         SQLiteDatabase db = getWritableDatabase();  
  45.         db.execSQL("insert into person (name,amount) values(?,?)",  
  46.                 new Object[]{person.getName(),person.getAmount()});  
  47.     }  
  48.        
  49.     public void update(Person person){  
  50.         SQLiteDatabase db = getWritableDatabase();  
  51.         db.execSQL("update person set name=? where persOnid=?",   
  52.                 new Object[]{person.getName(),person.getId()});  
  53.     }  
  54.        
  55.     public void delete(Integer id){  
  56.         SQLiteDatabase db = getWritableDatabase();  
  57.         db.execSQL("delete from person where persOnid=?"new Object[]{id.toString()});  
  58.     }  
  59.        
  60.     public Person find(Integer id){  
  61.         //如果只对数据进行读取,建议使用此方法  
  62.         SQLiteDatabase db = getReadableDatabase();  
  63.         Cursor cursor = db.rawQuery("select * from person where persOnid=?"new String[]{id.toString()});//得到游标  
  64.         if(cursor.moveToFirst()){  
  65.             int personid = cursor.getInt(cursor.getColumnIndex("personid"));  
  66.             String name = cursor.getString(cursor.getColumnIndex("name"));  
  67.             int amount = cursor.getInt(cursor.getColumnIndex("amount"));  
  68.             Person person = new Person(personid, name);  
  69.             person.setAmount(amount);  
  70.             return person;  
  71.         }  
  72.         return null;  
  73.     }  
  74.        
  75.     public List getScrollData(Integer offset, Integer maxResult){  
  76.         List persons = new ArrayList();  
  77.         SQLiteDatabase db = getReadableDatabase();  
  78.         Cursor cursor = db.rawQuery("select * from person limit ?,?",  
  79.                 new String[]{offset.toString(), maxResult.toString()});  
  80.         while(cursor.moveToNext()){  
  81.             int personid = cursor.getInt(cursor.getColumnIndex("personid"));  
  82.             String name = cursor.getString(cursor.getColumnIndex("name"));  
  83.             int amount = cursor.getInt(cursor.getColumnIndex("amount"));  
  84.             Person person = new Person(personid, name);  
  85.             person.setAmount(amount);  
  86.             persons.add(person);  
  87.         }  
  88.         cursor.close();  
  89.         return persons;  
  90.     }  
  91.        
  92.     public Cursor getCursorScrollData(Integer offset, Integer maxResult){  
  93.         SQLiteDatabase db = getReadableDatabase();  
  94.         return db.rawQuery("select personid as _id, name, amount from person limit ?,?",  
  95.                 new String[]{offset.toString(), maxResult.toString()});  
  96.     }  
  97.        
  98.     public long getCount() {  
  99.         SQLiteDatabase db = getReadableDatabase();  
  100.         Cursor cursor = db.rawQuery("select count(*) from person"null);  
  101.         cursor.moveToFirst();  
  102.         return cursor.getLong(0);  
  103.     }  
  104. }  
涉及到的bean

[java] view plain copy
  1. class Person {  
  2.     private Integer id;  
  3.     private String name;  
  4.     private Integer amount;  
  5.        
  6.     public Integer getAmount() {  
  7.         return amount;  
  8.     }  
  9.    
  10.     public void setAmount(Integer amount) {  
  11.         this.amount = amount;  
  12.     }  
  13.    
  14.     public Person(){}  
  15.        
  16.     public Person(Integer id, String name) {  
  17.         this.id = id;  
  18.         this.name = name;  
  19.     }  
  20.     public Integer getId() {  
  21.         return id;  
  22.     }  
  23.     public void setId(Integer id) {  
  24.         this.id = id;  
  25.     }  
  26.     public String getName() {  
  27.         return name;  
  28.     }  
  29.     public void setName(String name) {  
  30.         this.name = name;  
  31.     }  
  32.    
  33.     @Override  
  34.     public String toString() {  
  35.         return "Person [amount=" + amount + ", id=" + id + ", name=" + name  
  36.                 + "]";  
  37.     }  
  38.    
  39.    
  40. }  


摘自:http://www.apkbus.com/blog-58672-39951.html


推荐阅读
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 本文介绍了如何在 Spring 3.0.5 中使用 JdbcTemplate 插入数据并获取 MySQL 表中的自增主键。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 数据类型和操作数据表2.1MySQL类型之整型2.2MySQL数据类型之浮点型2.3日期时间型DATE1支持时间:1000年1月1日~9999年12月31日DATETIME ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 优化后的标题:Apache Cassandra数据写入操作详解
    本文详细解析了 Apache Cassandra 中的数据写入操作,重点介绍了 INSERT 命令的使用方法。该命令主要用于将数据插入到指定表的列中,其基本语法为 `INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...)`。通过具体的示例和应用场景,文章深入探讨了如何高效地执行数据写入操作,以提升系统的性能和可靠性。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
author-avatar
pierce2502910693
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有