[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应用程序与数据库结合的强大能力。以下将对该项目的关键技术点进行详细阐述...
SQLite数据库适合结构化数据的存储;内部存储和外部存储则可以用来保存文件,如图片、音频或文本文件。理解这些存储方式的特点和使用场景至关重要,例如,当你需要保存用户的偏好设置时,SharedPreferences是一个...
3. **SQLite数据库操作**: - `delete(String table, String whereClause, String[] whereArgs)`:删除数据行。 - `insert(String table, String nullColumnHack, ContentValues values)`:插入数据行。 - `...
**SQLite数据库**是Android系统内置的关系型数据库,适用于本地数据存储。SQLite提供了一个轻量级的解决方案,无需服务器支持,即可实现数据的持久化。在这个笔记应用中,SQLite用于存储用户的笔记内容,包括标题、...
这些功能的实现通常涉及到SQLite数据库操作、JSON序列化与反序列化、网络请求(如果涉及云同步)等技术。 6. **用户界面设计**: 为了实现极简主义,开发者需要精心设计每个界面,包括添加笔记的界面、笔记列表界面...
在本文中,我们将深入探讨SQLite数据库的相关知识点,包括其原理、特性、API使用、数据类型、SQL语法以及常见操作。 1. SQLite原理与特性: - **轻量级**: SQLite不需要独立的服务器进程,它作为一个库直接嵌入到...
Android内置了SQLite数据库,轻量级且足够处理大多数移动应用的需求。 #### 2. 创建数据库 - `SQLiteOpenHelper` 类用于创建、升级数据库,包含`onCreate()`和`onUpgrade()`方法。 - `SQLiteOpenHelper....
Android提供了多种数据存储方式,如SQLite数据库、SharedPreferences、内部存储和外部存储等。考虑到备忘录应用通常需要持久化数据,开发者可能使用了SQLite数据库来存储用户的笔记内容。SQLite是一个轻量级的数据库...
在数据存储方面,笔记涵盖了SQLite数据库的使用、SharedPreferences配置文件的读写,以及如何利用ContentProvider进行数据共享。这些知识可以帮助你有效地管理和持久化应用的数据。 此外,笔记还涉及到了网络编程,...
- 单用户应用:如个人笔记应用、小型网站后台数据存储。 总之,“sqlite-autoconf-3120100.tar.gz”提供了一个完整的SQLite 3.12.1源码包,适用于需要自定义配置和编译的场景,无论是开发新的应用程序还是在现有...
数据存储方面,Android支持SQLite数据库、SharedPreferences、内部/外部存储以及最近引入的Room数据库。开发者可能在笔记中探讨了各种存储方式的适用场景和使用技巧。 权限管理是Android开发中不容忽视的一环。自...
在这个demo中,可能会展示如何在SQLite数据库中存储和检索文本笔记。 2. **图片数据存储**:Android提供了多种存储图片的方法。可以将图片保存到内部存储(private storage),外部存储(public storage)或使用...
4. **数据管理**:本地数据存储可能利用SQLite数据库来保存笔记内容,同时可能使用ContentProvider进行数据共享和访问控制。 5. **网络通信**:为了实现云服务功能,应用可能使用了OkHttp或者Retrofit等网络库进行...
8. **数据存储**:Android提供了多种数据存储方式,包括SharedPreferences用于轻量级数据存储,SQLite数据库用于结构化的数据管理,以及ContentProvider用于共享数据。 9. **异步编程**:Android中的AsyncTask、...
6. **数据存储**:讲解SharedPreferences、SQLite数据库、文件存储以及ContentProvider的使用方法,以及何时选择合适的存储方式。 7. **网络编程**:介绍如何使用HttpURLConnection、OkHttp、Retrofit等库进行网络...
- 为了持久化笔记数据,项目可能会使用SQLite数据库,创建一个`Note`表来存储笔记内容。 - 或者,简单应用可能使用SharedPreferences,一种轻量级的数据存储方式,适用于少量数据的存储。 5. **生命周期管理**: ...
在这个云笔记App中,开发者可能使用了SQLite作为本地数据库来存储用户的笔记,同时通过网络接口(API)与服务端进行通信,实现数据的同步。 服务端的开发则可能使用IntelliJ IDEA,这是一个通用的Java开发环境,...
本教程将深入探讨Android系统中的文件存储机制以及SQLite数据库的使用。 首先,我们来谈谈Android的文件存取。在Android中,有多种方式来存储文件,包括内部存储、外部存储以及缓存存储。内部存储是应用程序私有的...
在数据存储方面,Android支持多种方式,如SQLite数据库、SharedPreferences、内部/外部存储以及最近引入的Room Persistence Library。了解这些存储方式的适用场景和优缺点,有助于选择最佳的数据管理策略。 网络...
4. **SQLite数据库**:这是Android内置的关系型数据库系统,适用于结构化数据的存储。通过SQLiteOpenHelper类,我们可以创建、升级数据库,并使用SQL语句进行数据操作。 接下来,我们将重点讨论Android的SQLite...