Android学习:SQLite使用

来源:互联网 发布:linux 写脚本文件 编辑:程序博客网 时间:2024/06/06 01:53

概述: 

在Android平台上,集成了一个嵌入式关系型数据库—SQLite,SQLite支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。

SQLite最大的特点是可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY(主键)的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误。 另外, SQLite 在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息,如下面语句会忽略name字段的类型信息:

CREATE TABLE person (personid integerprimary key autoincrement, name varchar(20))

——事实上在sqlite中可以保存超过20个字段

 

使用步骤:

因为比较熟悉j2ee当中数据库的使用,故前两步以此为对比学习Android中SQLite数据库的使用。

1、创建数据库 3、为实体数据表创建Java bean 

j2ee开发中,数据库由程序员手工创建。 

Android开发中,数据库被自动创建:

使用Android提供的工具类SQLiteOpenHelper创建数据库。

public static class DBOpenHelper extends SQLiteOpenHelper {public DBOpenHelper(Context context) {//参数一:上下文对象//参数二:指定要生成的数据库名称  DATABASE_NAME="EasyDispatch"//参数三:游标工厂(游标用于对查询后的结果集进行随机访问) null代表使用系统默认的游标工厂产生游标对象。        //参数四:数据库版本号(要求不能为0)DATABASE_VERSION="1"super(context, DATABASE_NAME, null, DATABASE_VERSION);}// 重载创建数据库的方法,在数据库第一次被创建的时候调用@Overridepublic void onCreate(SQLiteDatabase db) {                          //在这个方法中生成应用所需的数据表             //传入的参数SQLiteDatabase(数据库操作实例)中封装了针对数据库的所有操作,包括增删改查             // db.execSQL专门用来执行sql语句        db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))");      }// 重载更新数据库的方法,数据库版本变更的时候调用@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}


2、加载驱动 

j2ee开发中需要加载数据库驱动,创建连接。

使用SQLite数据库不用加载驱动,不用创建连接。

3、为实体数据表创建Java bean

4、创建Service类,加入增删改查方法。

5、Service中调用DBOpenHelper(参照项目中DBManager类的queryTaskReason方法)

6、语句的执行:

SQLiteOpenHelper helper = new DBOpenHelper (context);SQLiteDatabase db = helper.getWritableDatabase();db.execSQL(“insert into person(name,phone) values (‘111’,’222’)”);db.close();   //关闭数据库(当应用中只有一个地方使用数据库时,可以不将其关闭,//避免频繁打开数据库,提高性能)

插入、删除、修改SQL的执行方法:db.execSQL()

查找的执行方法:db.rawQuery()

返回一条记录:

Cursor cursor= db.rawQuery(“select…”);// Cursor游标对象的作用:用于对查询返回的结果集进行随机方法。//如果查询出的数据最多只有一条,移到第一条即可:if(cursor.moveToFirst()){   String name= cursor.getString(cursor.getColumnIndex(“name”));   return name; }

返回多条记录:

Cursor cursor= db.rawQuery(“select…”);while (cursor.moveToNext()) {String name= cursor.getString(cursor.getColumnIndex(“name”));listName.add(name);return listName;}

备注:

SQLiteOpenHelper中的两个方法——getReadableDatabase()和getWritableDatabase()方法

getReadableDatabase()getWritableDatabase()方法的区别:

数据库的磁盘空间满时不能调用getWritableDatabase()方法。

但是可以调用getReadableDatabase()方法,以只读方式打开数据库。

 

 

 

 

 

 

 

原创粉丝点击