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

View Code

使用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 }

View Code

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

public class PersonDao2 {private static final String TAG = "PersonDao2";private PersonSQLiteOpenHelper mOpenHelper;    // 数据库的帮助类对象public PersonDao2(Context context) {mOpenHelper = new PersonSQLiteOpenHelper(context);}/*** 添加到person表一条数据* @param person*/public void insert(Person person) {SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()) {    // 如果数据库打开, 执行添加的操作
            ContentValues values = new ContentValues();values.put("name", person.getName());        // key作为要存储的列名, value对象列的值values.put("age", person.getAge());long id = db.insert("person", "name", values);Log.i(TAG, "id: " + id);db.close();    // 数据库关闭
        }}/*** 更据id删除记录* @param id*/public void delete(int id) {SQLiteDatabase db = mOpenHelper.getWritableDatabase();    // 获得可写的数据库对象if(db.isOpen()) {    // 如果数据库打开, 执行添加的操作
            String whereClause = "_id = ?";String[] whereArgs = {id + ""};int count = db.delete("person", whereClause, whereArgs);Log.i(TAG, "删除了: " + count + "行");db.close();    // 数据库关闭
        }}/*** 根据id找到记录, 并且修改姓名* @param id* @param name*/public void update(int id, String name) {SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()) {    // 如果数据库打开, 执行添加的操作ContentValues values = new ContentValues();values.put("name", name);int count  = db.update("person", values, "_id = ?", new String[]{id + ""});Log.i(TAG, "修改了: " + count + "行");db.close();    // 数据库关闭
        }}public List<Person> queryAll() {SQLiteDatabase db = mOpenHelper.getReadableDatabase();    // 获得一个只读的数据库对象if(db.isOpen()) {String[] columns = {"_id", "name", "age"};    // 需要的列String selection = null;    // 选择条件, 给null查询所有String[] selectionArgs = null;    // 选择条件的参数, 会把选择条件中的? 替换成数据中的值String groupBy = null;    // 分组语句  group by nameString having = null;    // 过滤语句String orderBy = null;    // 排序
            Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);int id;String name;int age;if(cursor != null && cursor.getCount() > 0) {List<Person> personList = new ArrayList<Person>();while(cursor.moveToNext()) {    // 向下移一位, 知道最后一位, 不可以往下移动了, 停止.id = cursor.getInt(0);name = cursor.getString(1);age = cursor.getInt(2);personList.add(new Person(id, name, age));}db.close();return personList;}db.close();}return null;}/*** 根据id查询人* @param id* @return*/public Person queryItem(int id) {SQLiteDatabase db = mOpenHelper.getReadableDatabase();    // 获得一个只读的数据库对象if(db.isOpen()) {String[] columns = {"_id", "name", "age"};    // 需要的列String selection = "_id = ?";    // 选择条件, 给null查询所有String[] selectionArgs = {id + ""};    // 选择条件的参数, 会把选择条件中的? 替换成数据中的值String groupBy = null;    // 分组语句  group by nameString having = null;    // 过滤语句String orderBy = null;    // 排序
            Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);if(cursor != null && cursor.moveToFirst()) {        // cursor对象不为null, 并且可以移动到第一行int _id = cursor.getInt(0);String name = cursor.getString(1);int age = cursor.getInt(2);db.close();return new Person(_id, name, age);}db.close();}return null;}
}

事务的使用:

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

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

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

转载于:https://www.cnblogs.com/cuijl/p/4582311.html

基础学习总结(四)--SQLite相关推荐

  1. Shell 脚本基础学习 (四)

    现在我们来讨论编写一个脚本的一般步骤.任何优秀的脚本都应该具有帮助和输入参数.并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意.这时候,在写一 ...

  2. 量子计算入门基础学习(四——对角化,算符 迹 张量积)

    大家好,欢迎来到量子计算的第四部分,如果您是第一次观看我的博客,如果您也是和我一样刚入门量子力学或是量子计算相关的学习,纠结于量子的抽象与晦涩难懂,那么本专栏(量子计算)一定是您的不二之选,学海本就苦 ...

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

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

  4. python基础学习十四:面向对象三大特性之继承

    一.继承的基本概念 Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法,具体如下: # ⽗类A class A(object):def __init__(self ...

  5. DC基础学习(四)综合优化的三个阶段

    Design Compiler(以下简称DC)是Synopsys公司用于做电路综合的核心工具,可以将HDL描述的电路转换为基于工艺库的门级网表.本系列主要介绍综合相关的知识以及DC工具的使用. DC进 ...

  6. MySQL的基础学习(四)

    文章目录 一.视图 1. 单表视图 2. 多表视图 3. 视图操作语法 4. 视图更新 二.索引 1. 原理 1.1 Hash算法 1.2 二叉树 1.3 平衡二叉树 1.4 BTree 2. 操作 ...

  7. java基础学习(四)

    一.程序流程控制介绍: 在程序中,程序运行的流程控制决定程序是如何执行的,主要有 三大流程控制语句: 顺序控制 分支控制 循环控制 1.顺序控制:程序从上到下逐行地执行,中间没有任何判断和跳转 注:j ...

  8. 游戏开发 c++基础学习 第四天笔记摘要

    第四天笔记摘要 数组 一组相同数据类型变量的集合 定义:类型 数组名[]:大小必须是常量或常量表达式>=1 内存:所有元素内存大小之和(连续内存) 数据元素的访问:数组名[ 下标]:下标从0开始 ...

  9. salesforce 零基础学习(四十二)简单文件上传下载

    项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文 ...

  10. JavaScript基础学习第四天

    目标: 1. 通过循环的方式获取数组中的值,给数组赋值. 2. 能够理解为什么程序中要用数组 3. 能使用数组操作程序中的数据 ☞ 为什么要学习数组? 1. 什么是数组?: 依然是一个用来保存数据的一 ...

最新文章

  1. 如何让人大致理解RxJava思想:第一节 初步理解RxJava
  2. 对话推荐系统_RSPapers | 对话推荐系统论文合集
  3. linux ssh非交互脚本,Linux expect非交互式执行脚本
  4. 软件设计师学习3——操作系统知识1
  5. getmethodid( android/widget/toast ),Android功能实现-Go语言中文社区
  6. SQL 事务(Tran | Transation)与 Try...Catch 的使用
  7. P5960 【模板】差分约束算法 · spfa
  8. 请为横线处选择合适的程序使得程序的运行结果是123 ( )
  9. 假定在使用CSMA/CD协议的10Mbit/s以太网中某个站在发送数据时检测到碰撞,执行退避算法时选择了随机数r=100.试问这个站需要等待多长时间后才能再次发送数据?如果是100Mbit/s的以太网
  10. (解决)org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题的办法
  11. Matlab气液相界面,MATLAB,气液相平衡程序,求帮忙改一下。
  12. 学号,课程名查询成绩
  13. Android 蓝牙 ble 随机地址深层次分析
  14. 公众号文章排版样式——隐藏样式
  15. 微信小程序电商项目源代码开放连载二三事
  16. 15首中秋诗词,有2首你肯定熟悉
  17. 临时文件传输工具推荐
  18. Linux安装maven
  19. 牛视源码定制,抖音矩阵系统。come here
  20. 搞懂Python切片中start、end、steps正负的区别

热门文章

  1. linux fork 目录,linux fork()理解
  2. matlab数据求加速度,通过从移动设备获取加速度数据对进行计步
  3. PHP中self和static的区别,php中self与static的区别
  4. linux服务器六个状态,六、Linux_SSH服务器状态
  5. vs2015编译linux源码,使用Visual Studio 2017(VS2017)编译OpenCC 1.0.4 (Open Chinese Convert)源代码...
  6. python迷宫问题求最短路径_用栈求解迷宫问题的所有路径及最短路径程序
  7. OpenCV中的尺度不变特征变换(SIFT Scale-Invariant Feature Transform)
  8. 使用Python、OpenCVImageMagick工具箱制作GIF动画
  9. 【Mysql】日期、行变列(IF、CASE WHEN THEN)语句总结
  10. C语言:随笔10--共用体