`
coolxing
  • 浏览: 870116 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
9a45b66b-c585-3a35-8680-2e466b75e3f8
Java Concurre...
浏览量:95963
社区版块
存档分类
最新评论

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

阅读更多

[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学习笔记(十二)——数据存储(SQLite数据库)

    【第一部分】历史文章: Android学习笔记(一)——创建第一个Android项目 Android学习笔记(二)android studio基本控件及布局(实现图片查看器) ...Android学习笔记(七)——数据存储(共享参数Share

    【安卓项目】——新闻资讯类项目

    Android学习笔记(十二)——数据存储(SQLite数据库) Android学习笔记(十三)——数据存储(LitePal操作数据库) Android学习笔记(十四)——内容提供器 Android学习笔记(十五)——侧滑容器(ViewPager) .......

    Google Android SDK开发范例大全(完整版)

    由于 Android 平台包括流行的开源 SQLite 数据库,因此缓解了数据存储的负担。图 1 显示一个简化的 Android 软件层次结构。 图 1. Android 软件层次结构 ---------------------------------------------------...

    基于Android Studio开发的手机便签APP,手机笔记APP源代码+详细项目文档

    使用 SQLite 数据库进行存储管理。 View - 视图层:负责应用的用户界面设计和显示,包括主界面、添加笔记界面、详情界面和设置界面等。 Controller - 控制器层:负责管理用户与应用之间的交互,接收用户的输入并处理...

    Android开发笔记之Android中数据的存储方式(二)

    今天我们在讲下Android开发笔记之Android中数据的存储方式(一) 提到的除了SharedPreferences和Files(文本文件)以外的其他几种数据储存方式:xml文件、SQLite数据和Network。 1.3 例子  3. xml:  小案例:...

    NewNippon-Android-App

    NewNippon Android应用程式使用Dart(Flutter)...该项目中使用的技术后端数据库FireStore 身份验证Firebase Auth身份Firebase Auth 支付网关RazorPay Nodejs Express 本机Android数据库SQLite前端本机Android FLutter

    flutter-notes-app:基于Fluttter的笔记应用程序,支持照片笔记!

    可以更改便笺的颜色,将其标记为已加星标或已存档,创建照片便笺并将其保存在本地,并将所有内容存储在SQLite数据库中。目录清单执照贡献者去做 特征创建长文本注释SQLite上的安全数据存储将注释查看为交错图块或...

    Everpobre:Everpobre是一款类似于Android Evernote的应用程序,可在笔记本中创建笔记

    这是一个突出显示如何执行以下操作的示例: 按照一些最佳做法创建一个Android应用使用DAO访问您的数据轻松创建一个SQLite数据库使用可重复使用的片段一步步如果您想了解有关如何创建此项目的更多信息,请说明操作...

    java二次微信开发源码-mbc-awesome-stars:我自己的真棒清单!

    java二次微信开发源码真棒明星 我自己的真棒清单! 生成者 [Jupyter 笔记本](#jupyter 笔记本) C - Android ...路径在两个系统之间尽可能快地传输数据。 - 基于语音和视觉的智能个人助理 - 官方 open

    Android实现简易记事本

    此次做的Android简易记事本的存储方式使用了SQLite数据库,然后界面的实现比较简单,但是,具有增删改查的基本功能,这里可以看一下效果图,如下: 具体操作就是长按可以删除操作,点击可以进行修改,点击添加...

    Android Studio 记事本、日记本源码

    用Sqlite做数据库,用来存储账号以及笔记信息,实现了账号的注册以及登录功能,笔记方面实现了新增、删除、修改、搜索功能,列表展示笔记使用的是listView

    PassingNotes:用于 NJIT 的 NFC 阅读器 Android 应用程序

    传递笔记 用于 NJIT 的 NFC 阅读器应用...将笔记存储在本地 SQLite 数据库中 填写“查看笔记”活动(调用 SQLite DB 中的所有笔记) 去做: 添加基于附近手机的 NFC 意图 根据贴纸/笔记添加NFC意图 填写“发送注释”

    videodatabasefileprovider

    经过测试真实设备-Android 4.4, 真实Devie-... **特定于应用程序的文件/内部特定于应用程序的目录*** /data/data/your.package.name/ ***子目录:数据库–用于SQLite数据库问题Android:Sugar ORM无此类表例外:它与In

    NoteTaker:此仓库是一个小型Web应用程序,用于使用Flask,REST和数据库访问等多种技术进行笔记和存储

    完全实现:网路应用程式烧瓶MVC架构用Jinja制作模板材料设计(材料框架) REST支持(使用jQuery) REST API降价支持SQLAlchemy支持SQLite数据库通过连接字符串的多个数据库配置文件YAML部分实现:验证多用户支持计划...

Global site tag (gtag.js) - Google Analytics