当前位置:首页 > 开发 > 移动开发 > 正文

android笔记--android数据存储--SQLite数据库

发表于: 2011-10-24   作者:coolxing   来源:转载   浏览次数:
摘要: [coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]   获取SQLiteDatabase实例: 可以通过SQLiteDatabase类的静态方法获取其实例对象, 更一般的做法是通过SQLiteOpenHelper类创建SQLiteDatabase对象. 创建一个SQLiteOpenHelper子类, 并重写其onCreate()和onUpgrad

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]

 

获取SQLiteDatabase实例: 可以通过SQLiteDatabase类的静态方法获取其实例对象, 更一般的做法是通过SQLiteOpenHelper类创建SQLiteDatabase对象.

创建一个SQLiteOpenHelper子类, 并重写其onCreate()和onUpgrade()方法.

public class DbOpenHelper extends SQLiteOpenHelper {

public DbOpenHelper(Context context) {

// xing.db表示数据库的名称

// null表示使用系统默认的游标工厂对象

// 最后一个参数表示数据库的版本号, 版本号不能为0, 否则会导致onCreate方法不被执行

// 可查询源代码得知.

// 数据库文件存储在data/data/<package name>/databases目录下

super(context, "xing.db", null, 1);

}

/**

 * 数据库被创建时自动调用, 该方法一般完成建表操作

 */

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL("CREATE TABLE person(_id integer primary key autoincrement, name varchar(20), phone varchar(11), amount integer)");

}

/**

 * 数据库版本号改变时自动调用该方法 . 如果软件升级时涉及数据库表结构的改变, 可以在此方法中完成相关编码.

 */

@Override

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

}

}

调用SQLiteOpenHelper子类对象的getReadableDatabase()方法或getWriteableDatabase()方法可以获得SQLiteDatabase实例, 如果此时数据库不存在, android系统会自动生成一个数据库, 接着调用onCreate(SQLiteDatabase db)方法, 并将生成的数据库对象作为参数传递给该方法, 一般来说需要在onCreate方法中进行创建表的操作. 当数据库的版本更新时, 将回调onUpgrade()方法.

getWriteableDatabase()方法以读写方式打开数据库, 一旦数据库的磁盘空间满了, 数据库只能读而不能写, 这时程序就会出错. 而getReadableDatabase()方法会先尝试以读写的方式打开数据库, 一旦发生磁盘已满数据库只能读不能写的情况, 就会转而以只读的方式打开数据库, 程序也就不会出错.

 

数据库的增删改查. 获得SQLiteDatabase实例后, 就可调用其相应的方法以操作数据:

|--void execSQL (String sql): 执行SQL语句.

|--void execSQL (String sql, Object[] bindArgs): 执行带占位符的SQL语句.

|--Cursor rawQuery (String sql, String[] selectionArgs): 执行带占位符的查询语句并返回Cursor对象.

SQLiteDatabase类还包含一些具体的增删改查方法, 以方便对SQL语句不熟悉的开发者. 如果你熟悉常用的SQL语句, 推荐使用上述3个方法操作数据库.

 

Cursor对象. SQLite数据库查询语句的返回结果都是一个Cursor对象, Cursor对象的记录指针刚开始指向列名行.

|--boolean move (int offset): 将记录指针向上或向下移动指定的行数.

|--boolean moveToFirst (): 将记录指针移动到第一行.

|--boolean moveToLast (): 将记录指针移动到最后一行.

|--boolean moveToNext (): 将记录指针移动到下一行.

|--boolean moveToPosition (int position): 将记录指针移动到指定行.

|--boolean moveToPrevious (): 将记录指针向上移动一行.

一旦将记录指针移动到指定行后, 就可以调用Cursor对象的getXxx(int columnIndex)方法获取该行指定列的数据, 调用Cursor对象的getColumnIndex(String columnName)方法可以通过列名获得列的索引columnIndex.

Cursor对象在使用后, 应调用其close()方法关闭它. 但有一种情况例外: Cursor对象应用在adapter中时, 这种情况下如果关闭了Cursor, 会导致listview无法显示数据. 此时我们可以在Activity的onDestroy()方法中关闭它.

 

事务的提交与回滚. 某些数据的操作需要一起成功, 如果不能都成功, 则需要都失败, 不能出现部分操作成功的情况.

SQLiteDatabase类的几个方法提供这种事务功能:

|--void beginTransaction (): 开始事务.

|--void endTransaction (): 结束事务. 为确保该方法一定被调用, 一般可将其放置在finally语句块中.

|--void setTransactionSuccessful (): 设置事务标记为true. 事务标记的默认值为false, 调用endTransaction()方法结束事务时如果事务标记为false则回滚事务(即操作不进行), 如果事务标记为true则提交事务(即执行操作). 因此一般在调用beginTransaction()方法开启事务之后就紧接着调用setTransactionSuccessful ()方法.

|--boolean inTransaction (): 判断当前上下文是否处于事务中.

 

android笔记--android数据存储--SQLite数据库

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Android系统集成了一个轻量级的数据库,SQLite。它是一个嵌入式的数据引擎,专门适用于资源有限的设
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目
在Android平台上,集成了一个嵌入式关系型数据库—SQLite。如果你想要开发 Android 应用程序,一定
在Android平台上,集成了一个嵌入式关系型数据库—SQLite。如果你想要开发 Android 应用程序,一定
  在Android中一共提供了5种数据存储方式,分别为:   (1)Files:通过FileInputStream和FileO
SQLite数据库简单的认识 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计
SQLite数据库简单的认识 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计
SQLite数据库简单的认识 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计
SQLite数据库简单的认识 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计
SQLite数据存储 Android 集成了 SQLite 数据库。它存储在 /data/data/< 项目文件夹 >/databas
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号