1. SQLiteDatabase
 
操作SQLite数据库的类。可以执行SQL语句,对数据库进行增、删、查、改的操作。也可以进行transaction的控制。很多类对数据库的操作最终都是通过SQLiteDatabase实例来调用执行的。
需要注意的是,数据库对于一个应用来说是私有的,并且在一个应用当中,数据库的名字也是惟一的。
 
 
2. SQLiteOpenHelper
 
创建数据库和数据库版本管理的辅助类。这是一个抽象类,所以我们一般都有一个SQLiteOpenHelper子类,需要继承实现
· void onCreate(SQLiteDatabase db)
在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里边生成数据库表。
 
· void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表,当然是否还需要做其他的操作,完全取决于应用的需求。
 
而void onOpen(SQLiteDatabase db) 则可以选择重写。同时此类还有3个synchronized方法:void close(),SQLiteDatabasegetReadableDatabase(),SQLiteDatabasegetWritableDatabase()。
 
 
3. Cursor
 
游标。要注意这是一个接口。但很多时候我不需要知道它具体是哪个子类,直接按照API Doc里面提供的方法调用就行了。通过Cursor 我们可以对从数据库查询出来的结果集进行随机的读写访问。对于数据库的查询结果,一般是由子类SQLiteCursor返回的。

1. 加载驱动.
2. 连接数据库.
3. 操作数据库.

SQLite:一款轻量级的数据库,除了主键(Primark key)需要设置为Integer类型且填充数据必须是integer类型,其它字段均任意类型填充
字段属性与语法sqlserver类似,但无关键字

在android系统中提供了SQLiteOpenHelper抽象类,用于版本管理与操作:
onCreate:数据库创建时执行
onUpgrade:数据库更新版本时执行
onOpen:数据库打开连接时执行

实现SQLiteOpenHelper抽象类

  1. /*
  2. * 数据库帮助类
  3. * */
  4. public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
  5.  
  6. public PersonSQLiteOpenHelper(Context context) {
  7. //super(context, name, factory, version);
  8. /*
  9. * context 上下文
  10. * name 数据库名
  11. * factory游标工厂
  12. * version 版本,必须大于1*/
  13. super(context, "cuiOne.db", null, 1);
  14. // TODO Auto-generated constructor stub
  15. }
  16.  
  17. //数据库第一次创建时回调此方法
  18. //初始化一些表
  19. @Override
  20. public void onCreate(SQLiteDatabase db) {
  21. // TODO Auto-generated method stub
  22. String sql="create table Person(_id integer primary key,age integer,name varchar(20));";
  23. db.execSQL(sql);
  24.  
  25. }
  26.  
  27. //数据库的版本号更新时回调此 方法,
  28. //更新数据库内容
  29. @Override
  30. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  31. // TODO Auto-generated method stub
  32.  
  33. }
  34.  
  35. }

使用sql语句实现数据的insert、query

  1. public class Persondao {
  2. PersonSQLiteOpenHelper mOpenHelper;//成员变量
  3.  
  4. public Persondao(Context context){
  5. mOpenHelper=new PersonSQLiteOpenHelper(context);
  6. }
  7.  
  8. public void insert(Person p){
  9. //赋给db写入权限
  10. SQLiteDatabase db= mOpenHelper.getWritableDatabase();
  11. //判断数据库状态是否为打开状态
  12. if(db.isOpen()){
  13. db.execSQL("insert into person(name,age) values(?,?);", new Object[]{p.getName(),p.getAge()});
  14. db.close();
  15. }
  16. }
  17.  
  18. public List<Person> queryAll(){
  19. SQLiteDatabase db=mOpenHelper.getReadableDatabase();
  20. if(db.isOpen()){
  21. Cursor rawCur = db.rawQuery("select _id,age,name from Person", null);
  22. if(rawCur!=null&&rawCur.getCount()>0){
  23. List<Person> list=new ArrayList<Person>();
  24. int id;int age;String name;
  25. while(rawCur.moveToNext()){
  26. id=rawCur.getInt(0);
  27. age=rawCur.getInt(1);
  28. name=rawCur.getString(1);
  29. list.add(new Person(id,age,name));
  30. }
  31. db.close();
  32. return list;
  33. }
  34. db.close();
  35. }
  36. return null;
  37. }
  38.  
  39. public Person queryItem(int id){
  40. SQLiteDatabase db=mOpenHelper.getReadableDatabase();
  41. if(db.isOpen()){
  42. Cursor cur=db.rawQuery("select _id,age,name from Person where _id=?;", new String[]{String.valueOf(id)});
  43. //判断游标在移动到下一个位置时是否有值
  44. if(cur!=null&&cur.moveToFirst()){
  45. int _id=cur.getInt(0);
  46. int age=cur.getInt(1);
  47. String name=cur.getString(2);
  48. db.close();
  49. return new Person(_id,age,name);
  50. }
  51. db.close();
  52. }
  53. return null;
  54.  
  55. }
  56. }

使用SQLite工具类实现i,d,u,q

  1. public class PersonDao2 {
  2.  
  3. private static final String TAG = "PersonDao2";
  4. private PersonSQLiteOpenHelper mOpenHelper; // 数据库的帮助类对象
  5.  
  6. public PersonDao2(Context context) {
  7. mOpenHelper = new PersonSQLiteOpenHelper(context);
  8. }
  9.  
  10. /**
  11. * 添加到person表一条数据
  12. * @param person
  13. */
  14. public void insert(Person person) {
  15. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  16. if(db.isOpen()) { // 如果数据库打开, 执行添加的操作
  17.  
  18. ContentValues values = new ContentValues();
  19. values.put("name", person.getName()); // key作为要存储的列名, value对象列的值
  20. values.put("age", person.getAge());
  21. long id = db.insert("person", "name", values);
  22. Log.i(TAG, "id: " + id);
  23.  
  24. db.close(); // 数据库关闭
  25. }
  26. }
  27.  
  28. /**
  29. * 更据id删除记录
  30. * @param id
  31. */
  32. public void delete(int id) {
  33. SQLiteDatabase db = mOpenHelper.getWritableDatabase(); // 获得可写的数据库对象
  34. if(db.isOpen()) { // 如果数据库打开, 执行添加的操作
  35.  
  36. String whereClause = "_id = ?";
  37. String[] whereArgs = {id + ""};
  38. int count = db.delete("person", whereClause, whereArgs);
  39. Log.i(TAG, "删除了: " + count + "行");
  40. db.close(); // 数据库关闭
  41. }
  42. }
  43.  
  44. /**
  45. * 根据id找到记录, 并且修改姓名
  46. * @param id
  47. * @param name
  48. */
  49. public void update(int id, String name) {
  50. SQLiteDatabase db = mOpenHelper.getWritableDatabase();
  51. if(db.isOpen()) { // 如果数据库打开, 执行添加的操作
  52. ContentValues values = new ContentValues();
  53. values.put("name", name);
  54.  
  55. int count = db.update("person", values, "_id = ?", new String[]{id + ""});
  56.  
  57. Log.i(TAG, "修改了: " + count + "行");
  58.  
  59. db.close(); // 数据库关闭
  60. }
  61. }
  62.  
  63. public List<Person> queryAll() {
  64. SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象
  65. if(db.isOpen()) {
  66. String[] columns = {"_id", "name", "age"}; // 需要的列
  67. String selection = null; // 选择条件, 给null查询所有
  68. String[] selectionArgs = null; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值
  69. String groupBy = null; // 分组语句 group by name
  70. String having = null; // 过滤语句
  71. String orderBy = null; // 排序
  72.  
  73. Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);
  74.  
  75. int id;
  76. String name;
  77. int age;
  78. if(cursor != null && cursor.getCount() > 0) {
  79. List<Person> personList = new ArrayList<Person>();
  80.  
  81. while(cursor.moveToNext()) { // 向下移一位, 知道最后一位, 不可以往下移动了, 停止.
  82. id = cursor.getInt(0);
  83. name = cursor.getString(1);
  84. age = cursor.getInt(2);
  85.  
  86. personList.add(new Person(id, name, age));
  87. }
  88.  
  89. db.close();
  90. return personList;
  91. }
  92. db.close();
  93. }
  94. return null;
  95. }
  96.  
  97. /**
  98. * 根据id查询人
  99. * @param id
  100. * @return
  101. */
  102. public Person queryItem(int id) {
  103. SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象
  104. if(db.isOpen()) {
  105. String[] columns = {"_id", "name", "age"}; // 需要的列
  106. String selection = "_id = ?"; // 选择条件, 给null查询所有
  107. String[] selectionArgs = {id + ""}; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值
  108. String groupBy = null; // 分组语句 group by name
  109. String having = null; // 过滤语句
  110. String orderBy = null; // 排序
  111.  
  112. Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);
  113.  
  114. if(cursor != null && cursor.moveToFirst()) { // cursor对象不为null, 并且可以移动到第一行
  115. int _id = cursor.getInt(0);
  116. String name = cursor.getString(1);
  117. int age = cursor.getInt(2);
  118.  
  119. db.close();
  120. return new Person(_id, name, age);
  121. }
  122. db.close();
  123. }
  124. return null;
  125. }
  126. }

事务的使用:

// 开启事务
db.beginTransaction();

// 标记事务成功
db.setTransactionSuccessful();

// 停止事务
db.endTransaction();

基础学习总结(四)--SQLite的更多相关文章

  1. JavaScript 基础 学习 (四)

    JavaScript 基础 学习 (四) 解绑事件 dom级 事件解绑 ​ 元素.on事件类型 = null ​ 因为赋值的关系,所以给事件赋值为 null 的时候 ​ 事件触发的时候,就没有事件处理 ...

  2. javascript基础学习(四)

    javascript之流程控制语句 学习要点: 表达式语句含义 选择语句:if.if...else.switch 循环语句:while.do...while.for.for...in 跳转语句:bre ...

  3. Java基础学习笔记四 Java基础语法

    数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻 ...

  4. Java基础学习(四)-- 接口、集合框架、Collection、泛型详解

    接口 一.接口的基本概念 关键字为:Interface,在JAVA编程语言中是一个抽象类型,是抽象方法的集合.也是使用.java文件编写.   二.接口声明 命名规范:与类名的命名规范相同,通常情况下 ...

  5. <数据结构基础学习>(四)链表 Part 1

    一.链表基础 动态数组.栈.队列底层都是依托静态数组实现的,靠resize来解决固定容量问题. 链表是真正的动态数据结构,是一种最简单的一种动态数据结构. 更深入的理解引用(或者指针). 更深入的理解 ...

  6. python基础学习(四)if判断语句

    if判断语句的基本语法 在python中,if判断的格式如下: if 条件: 条件成立时,执行的语句 ...... 注意:代码的缩进要使用一个tab键或者四个空格(建议使用四个空格,tab和空格最好不 ...

  7. Python基础学习(四)

    菜鸟咀嚼python基础之继续. 一.返回函数 第三章已经简单操作了Python的高阶函数,目前继续练手函数作为返回值的特效:通常,高阶函数除了可以接收函数作为参数外,还可以把函数作为结果值返回. 案 ...

  8. Java基础学习(四)

    流程控制 /* 控制流程语句之---if 判断语句 格式一: 只适用于一种情况下去使用. if(判断条件){ 符合条件执行的代码; } 格式二:适用于两种情况下去使用 if(判断条件){ 符合条件执行 ...

  9. salesforce 零基础学习(四十八)自定义列表分页之Pagination基类封装 ※※※

    我们知道,salesforce中系统标准列表页面提供了相应的分页功能,如果要使用其分页功能,可以访问http://www.cnblogs.com/zero-zyq/p/5343287.html查看相关 ...

  10. salesforce 零基础学习(四十六)动态美观显示列表中记录的审批状态

    项目中,申请者申请某些事项以后,常常需要在申请列表中查看当前申请的记录所在的审批状态,动态美观的显示状态可以使UI更符合客户要求,比如下面这样. 以Goods__c表为例,申请者申请的一些采购以前需要 ...

随机推荐

  1. 基于ARM-LINUX的温度传感器驱动-DS18B20

    转载:http://blog.csdn.net/ayangke/article/details/6883244 作者:冯建,华清远见嵌入式学院讲师. DS18B20数字温度传感器接线方便,封装成后可应 ...

  2. 1.6.1 什么是 Indexing

    这部分描述了建立索引的过程:添加内容到solr索引中,如果有需要,修改内容或者删除它.通过添加内容到索引里边,我们使其内容可以搜索. solr索引能够接收不同来源的数据,xml文件,逗号分隔值的(CV ...

  3. iOS UINavigationController 详解

    developer.apple.com/cn/ 导航条   UINavigationBar继承UIView 导航控制器    UINavigationController (压栈,出栈)        ...

  4. 解决SecureCRT中文显示乱码

    操作步骤 以下两步: 远程linux机器.修改环境变量LANG.例如在~/.bash_profile里面添加 export LANG=zh_CN.UTF8 重新登录之后生效. 现在查看一下当前设置: ...

  5. Oracle基础 动态SQL语句

    一.静态SQL和动态SQL的概念. 1.静态SQL 静态SQL是我们常用的使用SQL语句的方式,就是编写PL/SQL时,SQL语句已经编写好了.因为静态SQL是在编写程序时就确定了,我们只能使用SQL ...

  6. JAVA xml 流方式读取。数据挖掘大文件预处理。

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  7. Umbraco(4)-Outputting the Document Type Properties(翻译文档)

    翻译原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/umbraco4outputting-the-document-typ ...

  8. 转: DH密钥交换和ECDH原理

    转自:http://www.tuicool.com/articles/em6zEb DH密钥交换和ECDH原理 时间 2013-06-24 18:50:55  CSDN博客 原文  http://bl ...

  9. html2canvas 踩坑总结

    需求:将html表格导出为图片,表格可以自己编辑数据,并适配各种屏幕大小.上网搜了下,找到了html2canvas,一开始使用的是最新版0.5.0,最终因为需要支持自定义div编辑框自动换行选择了v0 ...

  10. 【BUG】---ionic tab-demo项目在modal页跳转URL改变页面不刷新,手动刷新后显示空白

    问题描述: 项目是基于ionic tab的demo,在modal上访问其他页面,地址栏变化了,但是页面不动没刷新,自己手动刷新呢,还是空白,可是访问的页面时有内容的啊 错误: 我的路由配置 .stat ...