本文实例讲述了Android SQLite数据库操作方法。分享给大家供大家参考,具体如下:

SQLite and Android
SQLite简介
SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能。此外,它还是开源的,任何人都可以使用它。
SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。
SQLite支持的数据类型包括:
1. TEXT (类似于Java的String)
2. INTEGER (类似于Java的long)
3. REAL (类似于Java的Double)
更多SQLite数据类型知识可以参考前面相关文章入:详解SQLite中的数据类型
SQLite In Android
Android在运行时集成了SQLite,因此在Android中使用SQLite数据库并不需要安装过程和获取数据库使用权限,你只需要定义创建和更新数据库的语句即可,其他的会由Android平台替你搞定。
操作SQLite数据库通常意味着操作文件系统,这种操作还是比较耗时的,因此建议将数据库操作异步执行。
你的应用创建一个SQLite数据库,数据在默认情况下,存储在/DATA/data/APP_NAME/databases/FILENAME。这里DATA是Environment.getDataDirectory()方法返回的值,APP_NAME是你的应用包名
Android开发中使用SQLite数据库
Activity可以使用Content Provider或者 Service访问一个数据库。
创建数据库
Android不自动提供数据库。在Android应用程序中使用SQLite,必须自己创建数据库,然后创建表、索引、填充数据。Android提供了一个SQLiteOpenHelper帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。
SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:
构造函数,调用父类SQLiteOpenHelper的构造函数。这个方法需要四个参数:上下文环境,数据库名字,一个可选的游标工厂(通常是NULL),一个代表你正在使用的数据库模型版本的整数。
onCreate()方法,它需要一个SQLiteDatabase对象作为参数,根据需要对这个对象填充表和初始化数据。
onUpgrade()方法,它需要三个参数,一个SQLiteDatabase对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变为新的模型。
首先,定义需要创建的表结构,使用类来进行抽象,这里示例定义一个新浪微薄的帐号类:
public class AccountTable {
public static final String TABLE_NAME = "account_table";
public static final String UID = "uid";
public static final String USERNAME = "username";
public static final String USERNICK = "usernick";
public static final String AVATAR_URL = "avatar_url";
public static final String PORTRAIT = "portrait";
public static final String OAUTH_TOKEN = "oauth_token";
public static final String OAUTH_TOKEN_SECRET = "oauth_token_secret";
public static final String INFOJSON = "json";
}
下面代码展示了如何继承SQLiteOpenHelper创建数据库,推荐使用单例类:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import org.qii.weiciyuan.support.database.table.*;
class DatabaseHelper extends SQLiteOpenHelper {
private static DatabaseHelper singleton = null;
private static final String DATABASE_NAME = "weibo.db";
private static final int DATABASE_VERSION = 16;
static final String CREATE_ACCOUNT_TABLE_SQL = "create table " + AccountTable.TABLE_NAME
+ "("
+ AccountTable.UID + " integer primary key autoincrement,"
+ AccountTable.OAUTH_TOKEN + " text,"
+ AccountTable.OAUTH_TOKEN_SECRET + " text,"
+ AccountTable.PORTRAIT + " text,"
+ AccountTable.USERNAME + " text,"
+ AccountTable.USERNICK + " text,"
+ AccountTable.AVATAR_URL + " text,"
+ AccountTable.INFOJSON + " text"
+ ");";
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_ACCOUNT_TABLE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
default:
deleteAllTable(db);
onCreate(db);
}
}
public static synchronized DatabaseHelper getInstance() {
if (singleton == null) {
singleton = new DatabaseHelper(GlobalContext.getInstance());
}
return singleton;
}
private void deleteAllTable(SQLiteDatabase db) {
db.execSQL("DROP TABLE IF EXISTS " + AccountTable.TABLE_NAME);
}
}
增删改查数据库
因为SQLite支持标准的SQL语句,因此我们可以用标准SQL语句才增删改查数据库,推荐使用占位符的sql语句,看起来更加清爽,下面是我的代码示例:
package com.hw.droid.hwcatalog;
public class DatabaseManager {
private static DatabaseManager singleton = null;
private SQLiteDatabase wsd = null;
private SQLiteDatabase rsd = null;
private DatabaseManager() {
}
public static DatabaseManager getInstance(Context context) {
if (singleton == null) {
synchronized (DatabaseManager.class) {
if (singleton == null) {
DatabaseHelper databaseHelper = DatabaseHelper.getInstance(context);
singleton = new DatabaseManager();
singleton.wsd = databaseHelper.getWritableDatabase();
singleton.rsd = databaseHelper.getReadableDatabase();
}
}
}
return singleton;
}
public void initAccountTable(List<AccountData> listDatas) {
if (listDatas == null || listDatas.size() <= 0) {
return;
}
wsd.beginTransaction();
try {
for (AccountData data : listDatas) {
insertAccountTable(data);
}
wsd.setTransactionSuccessful();
} finally {
wsd.endTransaction();
}
}
private void insertAccountTable(AccountData accData) {
String sql = "insert into " + AccountTable.TABLE_NAME + "(" + AccountTable.USERNAME + ", "
+ AccountTable.USERNICK + ", " + AccountTable.AVATAR_URL + ", " + AccountTable.PORTRAIT + ", "
+ AccountTable.OAUTH_TOKEN + ", " + AccountTable.OAUTH_TOKEN_SECRET + ", " + AccountTable.INFOJSON
+ " " + ")" + " values(?, ?, ?, ?, ?, ?, ?)";
wsd.execSQL(sql,
new Object[] { accData.getUserName(), accData.getUserNick(), accData.getUrl(), accData.getPort(),
accData.getToken(), accData.getSecret(), accData.getJson(), accData.getThreads(), });
}
public List<AccountData> getAccountDatas() {
List<AccountData> listDatas = selectAccountData();
return listDatas;
}
private List<AccountData> selectAccountData() {
List<AccountData> listAccountData = new ArrayList<AccountData>();
String querySql = "select " + AccountTable.USERNAME + ", " + AccountTable.USERNICK + ", " + AccountTable.AVATAR_URL + ", " + AccountTable.PORTRAIT + ", " + AccountTable.OAUTH_TOKEN + ", " + AccountTable.OAUTH_TOKEN_SECRET + ", " + AccountTable.INFOJSON " " + " from " + BbsForumsTable.TABLE_NAME;
Cursor cursor = rsd.rawQuery(querySql, null);
if (cursor.moveToFirst()) {
do {
AccountData data = new AccountData();
data.setUserName(cursor.getString(cursor.getColumnIndex(AccountTable.USERNAME)));
data.setUserNick(cursor.getString(cursor.getColumnIndex(AccountTable.USERNICK)));
data.setUrl(cursor.getString(cursor.getColumnIndex(AccountTable.AVATAR_URL)));
data.setPort(cursor.getString(cursor.getColumnIndex(AccountTable.PORTRAIT)));
data.setToken(cursor.getString(cursor.getColumnIndex(AccountTable.OAUTH_TOKEN)));
data.setSecret(cursor.getString(cursor.getColumnIndex(AccountTable.OAUTH_TOKEN_SECRET)));
data.setJson(cursor.getString(cursor.getColumnIndex(AccountTable.INFOJSON)));
listAccountData.add(data);
} while (cursor.moveToNext());
}
cursor.close();
return listAccountData;
}
public void deleteBbsDatas() {
String delSql = "delete from " + AccountTable.TABLE_NAME;
wsd.execSQL(delSql);
}
}
事物(DBTransaction)
Android中经常会用到数据库缓存,特别是wifi情况下遇到数据不一致情况需要更新缓存数据,这个时候就需要用到事物处理,保证操作的完整性和速度。Android中使用SQLite保证事务完整性示例如下:
public void initAccountTable(List<AccountData> listDatas) {
if (listDatas == null || listDatas.size() <= 0) {
return;
}
wsd.beginTransaction();
try {
for (AccountData data : listDatas) {
insertAccountTable(data);
}
wsd.setTransactionSuccessful();
} finally {
wsd.endTransaction();
}
}
通过beginTransaction()开启事务,endTransaction()结束事务,并且设置事务执行成功标识setTransactionSuccessful().
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android操作SQLite数据库技巧总结》、《Android数据库操作技巧总结》、《Android编程之activity操作技巧总结》、《Android文件操作技巧汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
# Android
# SQLite数据库
# 操作方法
# Android SQLite事务处理结合Listview列表显示功能示例
# Android开发笔记SQLite优化记住密码功能
# Android利用listview控件操作SQLite数据库实例
# Android批量插入数据到SQLite数据库的方法
# Android SQLite数据库基本操作方法
# Android使用SQLite数据库的示例
# android SQLite数据库总结
# Android SQLite数据库版本升级的管理实现
# 操作技巧
# 类似于
# 推荐使用
# 个旧
# 创建一个
# 应用程序
# 进阶
# 情况下
# 几个
# 很好
# 相关内容
# 子类
# 就有
# 可以用
# 其他的
# 感兴趣
# 相关文章
# 帐号
# 给大家
# 这个时候
相关文章:
沈阳制作网站公司排名,沈阳装饰协会官方网站?
如何在景安服务器上快速搭建个人网站?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
学校为何禁止电信移动建设网站?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
焦点电影公司作品,电影焦点结局是什么?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
大型企业网站制作流程,做网站需要注册公司吗?
股票网站制作软件,网上股票怎么开户?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
制作宣传网站的软件,小红书可以宣传网站吗?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何选择适配移动端的WAP自助建站平台?
简历在线制作网站免费版,如何创建个人简历?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
nginx修改上传文件大小限制的方法
制作企业网站建设方案,怎样建设一个公司网站?
如何在Windows环境下新建FTP站点并设置权限?
香港网站服务器数量如何影响SEO优化效果?
如何用PHP快速搭建CMS系统?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
建站VPS能否同时实现高效与安全翻墙?
建站上传速度慢?如何优化加速网站加载效率?
建站之星代理商如何保障技术支持与售后服务?
独立制作一个网站多少钱,建立网站需要花多少钱?
专业商城网站制作公司有哪些,pi商城官网是哪个?
建站之星后台管理系统如何操作?
如何选择高效便捷的WAP商城建站系统?
如何制作算命网站,怎么注册算命网站?
如何高效完成自助建站业务培训?
建站之星安装后如何自定义网站颜色与字体?
长沙做网站要多少钱,长沙国安网络怎么样?
如何在自有机房高效搭建专业网站?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
建站主机CVM配置优化、SEO策略与性能提升指南
如何在橙子建站中快速调整背景颜色?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
如何正确选择百度移动适配建站域名?
香港服务器租用费用高吗?如何避免常见误区?
如何在服务器上配置二级域名建站?
h5网站制作工具有哪些,h5页面制作工具有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。