Android学习笔记 --- 数据库Sqlite

 

Sqlite 是一款轻型的数据库,是遵守ACID(原子性、一致性、隔离性、持久性)的关联式数据库管理系统,多用于嵌入式开发中。

Sqlite的数据类型:Typelessness(物类型),可以保存任何类型的数据到你所想要保存的任何表的任何列中,但它又支持常见的类型如:NULL,VARCHAR,TEXT,INTEGER,BLOG,CLOB....等等,唯一例外的是:integer primary key 此字段只能存储64为整数

在Android系统中,提供了SQLiteOpenHelper抽象类,该类用于对数据库版本进行管理,该类中常用的方法:

onCreate    数据库创建时调用此方法(第一次连接获取数据库对象时执行)

onUpgrade    数据库更新时调用此方法(版本号改变时执行)

onOpen    数据库每次打开时执行(每次打开数据库时调用哦,在onCreate、onUpgrade方法之后

1.使用SQLiteDatabase操作SQLite数据库

Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据的添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete),这些操作简称为(CRUD)

execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法用于执行select语句(查询query)。

 首先创建数据库类:

 1 public class MySqliteOpenHelper extends SQLiteOpenHelper {
 2
 3     /**
 4      * 数据库名称
 5      */
 6     private static final String name = "database.db";
 7
 8     /**
 9      * 数据库版本号
10      */
11     private static final int version = 1;
12
13     public MySqliteOpenHelper(Context context) {
14         super(context, name, null, version);
15     }
16
17     /**
18      * 数据库创建时调用
19      */
20     @Override
21     public void onCreate(SQLiteDatabase db) {
22         // 创建表database
23         String sql = "create table database (_id integer primary key autoincrement,name varchar(20),age 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 }

  SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法

方法名 方法描述

public MySqliteOpenHelper(Context context, String name,
CursorFactory factory, int version)

构造方法,一般传递一些参数
onCreate(SQLiteDatabase db) 创建数据库时调用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) 版本更新时调用
getReadableDatabase() 获取可读的SqliteDatabase
getWritableDatabase() 获取可写的SqliteDatabase

创建数据库:

1 /**
2      * 数据库帮助类
3      */
4     private MySqliteOpenHelper helper;
5
6     public DatabaseUtils(Context context){
7         helper = new MySqliteOpenHelper(context);
8     }

  数据库的增删改查:

 1 /**
 2      * 将数据插入数据库
 3      */
 4     public void insert(){
 5         SQLiteDatabase db = null;
 6         try {
 7             db = helper.getWritableDatabase(); // 获得可写的SQliteDatabase
 8             db.beginTransaction(); // 开启事务
 9             String sql = "insert into database values(null,‘zhangsan‘,‘20‘)";
10             db.execSQL(sql); // 执行语句
11             db.setTransactionSuccessful(); // 调用此方法会在执行到endTransaction()方法时提交当前事务,如果不调用此方法会回滚事务
12         }finally{
13             if(db != null){
14                 db.endTransaction(); // 事务的结束的标志,决定是提交事务还是回滚事务
15             }
16         }
17         db.close();
18     }
19
20     /**
21      * 更新数据库中的数据
22      */
23     public void update(){
24         SQLiteDatabase db = helper.getWritableDatabase(); // 获得可写的SQliteDatabase
25         ContentValues values = new ContentValues();
26         values.put("name", "lisi");
27         db.update("database", values, "name = ?", new String []{"zhangsan"});
28         db.close();
29     }
30
31     /**
32      * 查询数据库
33      */
34     public void query(){
35         SQLiteDatabase db = helper.getReadableDatabase(); // 获得可读的SQliteDatabase
36         String sql = "select name,age from database";
37
38         Cursor cursor = db.rawQuery(sql, null);
39         while(cursor != null && cursor.moveToNext()){ // cursor 不为null 防止出现空指针异常 moveToNext ()移动到下一行
40             String name = cursor.getString(0); // 获得第一列的值,第一列的索引从0开始
41             int age = cursor.getInt(1); // 获得第二列的值
42             System.out.println("name : " + name + "," + "age :" + age);
43         }
44
45         cursor.close();
46         db.close();
47
48     }
49
50     /**
51      * 删除数据库中的数据
52      */
53     public void delete(){
54         SQLiteDatabase db = helper.getWritableDatabase(); // 获得可写的SQliteDatabase
55         db.delete("database", null, null);
56         db.close();
57     }

  Cursor是结果集游标,用于对结果集进行随机访问,与jdbc中的ResultSet作用很相似。使用moveToNext()方法可以将游标从当前行移动到下一行,如果已经移到了最后吧一行,返回结果为false,否则为true。另外Cursor还用常用的moveToPrevious()方法(用于将游标从当前行移动到上一行,如果已经移动到了结果集的第一行,返回值为false,否则为true)、moveToFirst()方法(用于将游标移动到结果集的第一行,如果结果集为空,返回值为false,否则为true)和moveToLast()方法(用于将游标移动到结果集的最后一行,如果结果集为空,返回值为false,否则为true);

使用事务操作Sqlite数据库

 

    SQLiteDatabase db = null;

          try {

           db = helper.getWritableDatabase();

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

           String sql = "insert into database values(null,‘zhangsan‘,‘20‘)";

           db.execSQL(sql);

           db.execSQL("update database set name=? where age=?", new Object[]{"wangwu", 20});

           db.setTransactionSuccessful(); // 调用此方法会在执行到endTransaction()方法时提交当前事务,如果不调用此方法会回滚事务

          }finally{

               if(db != null){

               db.endTransaction(); // 事务的结束的标志,决定是提交事务还是回滚事务

           }

      }

          db.close();

使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction()方法时会检查事务的标志是否成功,如果程序执行到endTransaction()方法之前调用了setTransactionSuccessful()方法设置事务的标志为成功,则提交事务,如果没有调用setTransactionSuccessful()方法则回滚事务

时间: 2024-08-25 19:57:32

Android学习笔记 --- 数据库Sqlite的相关文章

Android学习笔记(42):SQLite数据库

(1)SQLite数据库 先简单介绍一下SQLite数据库: 2000年由D.Richard Hipp发布. 是一款轻型.开源嵌入式关系数据库,占用资源非常低.目前用于很多嵌入式产品中,在嵌入式设备中,SQLite可能只需要几百K的内存就够了. 与Mysql.PostgreSQL这两款开源世界著名的数据库管理系统相比,它的处理速度更快. 在Android平台下,除了可以在Android程序中操作SQLite数据库之外,还可以在命令行模式下进行各种数据库的操作,包括表的各种操作,对数据的增加.删除

Android学习笔记(SQLite的简单使用)

1.SQLite介绍 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 2.SQLiteOpenHelper的使用方法 常用方法    1.getReadableDatabase():得到可读的数据库,返回一个SQLiteDatabase对象,提供一些管理数据库的方法 

Android学习笔记之SQLite数据库的使用及常用的增删改查方法、无sql语句的DRUD方法汇总

(1)目录结构如下: (2)链接数据库的文件:DBHelper.java要继承SQLiteOpenHelper类 package com.lc.sqlite_demo1.db; import android.content.Context; import android.database.DatabaseErrorHandler; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLit

Android学习笔记(四一):SQLite的使用

SQLite是非常流行的嵌入式关系型数据库,轻载,速度快,而且是开源.在Android中,runtime提供SQLite,所以我们可以使用SQLite,而且是全集的SQLite.SQLite提供SQL接口,和一般的数据库一样.但是Android的API不采用JDBC,JDBC消耗太多的资源. SQLite支持绝大部分SQL-92标准,不支持:FOREIGN KEY constraints, nested transactions, RIGHT OUTER JOIN, FULL OUTER JOI

Android学习笔记(四二):SQLite、ListView、ContextMenu

继续上一个例子,结合ListView中对SQLite进行操作. 通过CursorAdapter在ListView中的数据呈现 在上一个例子中,我们可以对SQLite中的数据库进行增删改查,将数据读到游标Cursor中,然后一一读出.在Android中可以通过CursorAdapter直接将数据映射到ListView中,如下处理: public class Chapter22Test1 extends ListActivity{    private SQLiteDatabase  db = nu

Android学习笔记(四七):Content Provider初谈和Android联系人信息

Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增.删.改.查的操作.Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取数据,也可以实现跨应用的数据访问.简单地说,Android通过content Provider从数据的封装中获取信息. Content provider使用Uri

Android学习笔记(四三):文件访问

之前我们学习了通过preference和SQLite数据库进行数据存储,也可以通过文件方式.文件可以是在应用打包时预置,也可以是应用所生成. 文件访问有两种方式:一:静态数据的文件可以防止在res/raw中,这些文件是只读的,只有在应用版本升级的时候进行修改,或者我们先读出这些数据,通过 reference的方式来处理,这样以后可以进行修订,但是这种方式,会有两份数据保存.二:另一种方式是通过URL访问文件,动态数据的读取也可以采用SQLite3的方式. res/raw/下静态文件的读取 在re

Android学习笔记(四八):提供自己的Content Provider

在上一次的学习中,采用了原生的内容提供者Contact,Contact有多层映射关系,比较复杂,并非作为小例子的好选择,在本次学习中,我们将学习如何建立Content Provider,并通过Uri进行增删改查.如果应用的数据只需自己使用,并不需要content provider,相反避免这样做,可直接访问数据:但是若希望数据可以被其他应用访问,创建content provider就是常规手段. 再谈Content Provider的Uri 在上一次学习中,我们谈到了Uri的格式.现在已cont

Android学习笔记(四九):通过Content Provider访问数据

在上次笔记中,我们编写了自己的Provider,这次笔记,我们将通过Content Provider的Uri接口对数据进行访问,重写Android学习笔记(四二)中例子.在这里我们不在充分描述相关UI如何编写,可以到笔记(四二)中详细查看,重点讲述如何实现数据的访问. 读取信息 读取信息方式,在笔记(四七)中已经介绍,代码如下 private voidread(){     /* 通过managedQuery读取,第1参数表示URI, 第2参数表示所需读取的信息,第3个参数是限制条件,类似SQL