SQLite数据库的使用

一、SQLite数据库的使用

为了方便使用SQLite数据库,Android SDK提供了一系列对数据库进行操作的类和接口,接下来针对这些类和接口进行简单介绍。

1.SQLiteOpenHelper

SQLiteOpenHelper是一个抽象类,该类用于创建数据库和数据库版本更新。常用方法如下:

所有继承了这个类的类都必须实现下面这样的一个构造方法: 
public DatabaseHelper(Context context, String name, CursorFactory factory, int version) 
第一个参数:Context类型,上下文对象。 
第二个参数:String类型,数据库的名称 
第三个参数:CursorFactory类型 
第四个参数:int类型,数据库版本 
下面是这个类的几个方法: 
方法名 返回类型 描述 备注 
getReadableDatabase() synchronized SQLiteDatabase 创建或打开一个数据库 可以通过这两个方法返回的SQLiteDatabase对象对数据库进行一系列的操作,如新建一个表,插入一条数据等 
getWritableDatabase() synchronized SQLiteDatabase 创建或打开一个可以读写的数据库 
onCreate(SQLiteDatabase db) abstract void 第一次创建的时候调用 
onOpen(SQLiteDatabase db) void 打开数据库 
onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) abstract void 升级数据库 
close() synchronized void 关闭所有打开的数据库对象 

 

2.SQLiteDatabase

SQLiteDatabase是数据可靠访问类,该类封装了一系列数据库操作的API,可以对数据进行增删改查操作。常用方法如下:

1db.insert(table, nullColumnHack, values)

第一个参数是表名称

第二个参数是空列的默认值

第三个参数是ContentValues类型的一个封装了列名称和列值的Map

2db.delete(table, whereClause, whereArgs)

第一个参数是表名称

第二个参数是删除条件

第三个参数是删除条件值数组

3db.update(table, values, whereClause, whereArgs)

第一个参数是表名称

第二个参数是更行列ContentValues类型的键值对(Map

第三个参数是更新条件(where字句)

第四个参数是更新条件数组

(4)db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy)

各个参数的意义说明:

table:表名称

columns:列名称数组

selection:条件字句,相当于where

selectionArgs:条件字句,参数数组

groupBy:分组列

having:分组条件

orderBy:排序列

limit:分页查询限制

 

5db.execSQL(sql) // 执行任何SQL语句

(6)db.close() 关闭数据库

 

3.Cursor接口

Cursor是一个游标接口,在数据库中作为返回值,相当于结果集ResultSet提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()

Cursor常见方法如下:

 

getCount()   总记录条数

isFirst()     判断是否第一条记录

isLast()      判断是否最后一条记录

moveToFirst()    移动到第一条记录

moveToLast()    移动到最后一条记录

move(int offset)   移动到指定记录

moveToNext()    移动到下一条记录

moveToPrevious()    移动到上一条记录

getColumnIndexOrThrow(String columnName)  根据列名称获得列索引

getInt(int columnIndex)   获得指定列索引的int类型值

getString(int columnIndex)   获得指定列缩影的String类型值

 

以上就是Android SDK提供操作SQLite数据的一些类和接口以及常用的方法介绍。

 

二、数据库的常用操作

1.创建SQLite数据库

需创建一个类来继承SQLiteOpenHelper,重写onCreate()方法,并在该方法中执行数据库的命令。具体代码如下:

public class MyHelper extends SQLiteOpenHelper {

// 由于父类没有无参构造函数, 所以子类必须指定调用父类哪个有参的构造函数

public MyHelper(Context context) {

super(context, "itcast.db", null, 2);

}

//数据库第一被创建时调用该方法

public void onCreate(SQLiteDatabase db) {

System.out.println("onCreate");

//初始化数据库的表结构,并自行一条建表的SQL语句

db.execSQL("CREATE TABLE account(_id INTEGER PRIMARY KEY AUTOINCREMENT,"

+ "name VARCHAR(20)," + // 姓名列

"balance INTEGER)"); // 金额列

}

 

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

System.out.println("onUpgrade");

}

}

2.增加一条数据

向表插入数据前,首先要得到一个可读写的SQLiteDatabase对象,具体代码如下:

public void insert(Account account) {

SQLiteDatabase db = helper.getWritableDatabase(); // 获取数据库对象

            // 用来装载要插入的数据的 Map<列名, 列的值>

ContentValues values = new ContentValues();

         values.put("name", account.getName());

values.put("balance", account.getBalance());

long id = db.insert("account", null, values); // account表插入数据values,

account.setId(id);  // 得到id

db.close();         // 关闭数据库

}

3.修改一条数据

使用SQLiteDatabaseupdate()方法修改表的数据,具体代码如下:

public int update(Account account) {

SQLiteDatabase db = helper.getWritableDatabase();

ContentValues values = new ContentValues(); // 要修改的数据

values.put("name", account.getName());

values.put("balance", account.getBalance());

int count = db.update("account", values, "_id=?",

new String[] { account.getId() + "" }); // 更新并得到行数

db.close();

return count;

}

4.删除一条数据

 //根据id 删除数据

public int delete(long id) {

SQLiteDatabase db = helper.getWritableDatabase();

// 按条件删除指定表中的数据, 返回受影响的行数

int count = db.delete("account", "_id=?", new String[] { id + "" });

db.close();

return count;

}

5.查询一条数据

public List<Account> queryAll() {

SQLiteDatabase db = helper.getReadableDatabase();

Cursor c = db.query("account", null, null, null, null, null,

"balance DESC");

List<Account> list = new ArrayList<Account>();

while (c.moveToNext()) {

long id = c.getLong(c.getColumnIndex("_id")); // 可以根据列名获取索引

String name = c.getString(1);

int balance = c.getInt(2);

list.add(new Account(id, name, balance));

}

c.close();

db.close();

return list;

}

 

注意,在使用完Cursor时一定要及时关闭,否则会造成内存泄漏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值