Android--SQLite(一)
Android系统集成了一个轻量级的数据库:SQLite,SQLite是一个嵌入式的数据库引擎,专门适用于资源有限的设备上(手机、PDA)的适量数据存储。
Android提供了SQLiteDatabase,它代表了一个SQLite数据库(底层就是一个数据文件),在个数据库中理论上是这可以存在无限多个表的。一旦应用程序获得了代表指定数据库的SQLiteDatabase对象,就可以通过SQLiteDatabase对象来操作SQLite数据库。
SQLiteDatabase提供了几个静态的方法来打开一个文件对应的数据库,此处介绍几个常用的:
- static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags):打开path文件所代表的SQLite数据库。
- static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory):打开或创建(如果不存在)path文件所代表的SQLite数据库。
- static SQLiteDatabase openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory):打开或创建(如果不存在)file文件所代表的SQLite数据库。
在得到SQLiteDatabase对象之后,就可以调用方法执行SQL语句了,在此处介绍几个常用的方法,是直接执行SQL语句的,需要有SQL语法基础,如果不熟悉SQL语法,SQLiteDatabase还提供了其他代替方法,此处不在此介绍。
- void execSQL(String sql):执行无返回值的SQL语句,如:insert、delete、update。
- void execSQL(String sql, Object[] bindArgs):执行带占位符的SQL语句,占位符用?表示。
- Cursor rawQuery(String sql, String[] selectionArgs):执行一个带占位符的查询,返回一个Cursor对象。
- void beginTransaction():开始事务。
- void endTransaction ():结束事务。
- void close ():关闭数据库
对于查询方法,会返回一个Cursor对象,Cursor提供如下方法来移动查询结果的记录指针。
- abstract boolean move(int offset):将记录指针向上或向下移动指定的行数。offset为正数就是向下移动;为负数就是向上移动。
- abstract boolean moveToFirst():将记录指针移动到第一行,如果移动成功则返回true。
- abstract boolean moveToLast():将记录指针移动到最后行,如果移动成功则返回true。
- abstract boolean moveToNext():将记录指针移动到下一行,如果移动成功则返回true。
- abstract boolean moveToPosition(int position):将记录指针移动到指定的行,如果移动成功则返回true。
- abstract boolean moveToPrevious():将记录指针移动到上一行,如果移动成功则返回true。
- abstract Xxx getXxx(int columnIndex):获取该行的指定列的数据。
示例:创建一个数据库并往其中插入数据。
PS:通过File Explorer查看Android模拟器文件,发现新创建的数据库文件在data/data/<package name>/files/目录下面。
总结起来,使用SQLiteDatabase对象进行SQLite数据库操作的大致步骤如下:
- 获取SQLiteDatabase对象,它代表了与SQLite数据库的连接。
- 调用SQLiteDatabase对象的方法来执行SQL语句。
- 操作SQL语句的执行结果。
- 关闭SQLiteDatabase对象,回收资源。
sqlite3
在Android的SDK中,提供了一个名为sqlite3.exe的工具(在tools文件夹下)。它是一个简单的SQLite数据库管理工具,类似于MySQL提供的命令行窗口。
SQLite支持的数据类型
SQLite内部只支持NULL、INTEGER、REAL(浮点型)、TEXT(文本)、BLOB(大二进制对象)这五种数据类型。但是实际上SQLite完全可以接受varchar、char、decimal等数据类型,只不过SQLite会在运算或保存时将他们转换为上面5种数据类型中相应的类型,所以开发者可以不关心声明该字段所使用的数据类型。
唯一例外的情况是:定义为INTEGER PRIMARY KEY的字段只能存储64位整数,当向其插入其他类型数据的时候,SQLite会产生错误。
SQLite的事务
SQLite也支持事务机制,前面已经介绍了SQLiteDatabase包含的两个控制事务的方法:beginTransaction(开始事务)和endTransaction(结束事务)。除此之外SQLiteDatabase对象还提供了inTransaction方法判断上下文是否处于事务中,处于返回true,否则返回false。
对于数据库的操作,SQLiteDatabase如何判断提交事务还是回滚事务?
SQLiteDatabase对象中还存在一个方法setTransactionSuccessful,用于设置事务的标识,如果程序事务执行中调用该方法设置了事务成功,则提交事务,否则程序将回滚事务。最好配合try--finally来处理。
示例:
1 public void insertDB() 2 { 3 db.beginTransaction();//开始事务 4 try 5 { 6 //执行DDL创建数据表 7 db.execSQL("create table news_inf(_id integer primary key autoincrement," 8 + " news_title varchar(50)," 9 + " news_content varchar(255))"); 10 //执行insert语句插入数据 11 insertData(db , "title" , "content"); 12 //执行查询 13 Cursor cursor = db.rawQuery("select * from news_inf", null); 14 inflateList(cursor); 15 db.setTransactionSuccessful();//执行完设置事务成功;否则endTransaction方法将回滚。 16 } 17 finally 18 { 19 db.endTransaction();//结束事务 20 } 21 }
本文转自承香墨影博客园博客,原文链接:http://www.cnblogs.com/plokmju/archive/2013/03/19/2969274.html,如需转载请自行联系原作者
Android--SQLite(一)相关推荐
- android sqlite 中 创建表 不要使用 IF NOT EXISTS + TA...
2019独角兽企业重金招聘Python工程师标准>>> android sqlite 中 创建表 不要使用 "IF NOT EXISTS " + TABLE_NA ...
- android SQLite 批量插入数据慢的解决方案 (针对于不同的android api 版本)
android SQLite 批量插入数据慢的解决方案 (针对于不同的android api 版本) 参考文章: (1)android SQLite 批量插入数据慢的解决方案 (针对于不同的andro ...
- android用于查询数据的方法,android: SQLite查询数据
掌握了查询数据的方法之后,你也就将数据库的 CRUD 操 作全部学完了.不过千万不要因此而放松,因为查询数据也是在 CRUD 中最复杂的一种 操作. 我们都知道 SQL 的全称是 Structured ...
- Android SQLite数据库的详细使用
SQLite 简介 SQLite 是一款内置到移动设备上的轻量型的数据库,是遵守ACID(原子性.一致性.隔离性.持久性)的关联式数据库管理系统,多用于嵌入式系统中 SQLite 数据库是无类型的,可 ...
- android 数据库表格数据库数据库中,Android SQLite数据库中的表详解
Android SQLite数据库 前言 以前写PHP的时候,内置了print_r()和var_dump()两个函数用于打印输出任意类型的数据内部结构,现在做Android的开发,发现并没有这种类似的 ...
- 利用SQLChiper对Android SQLite数据库加密
利用SQLChiper对Android SQLite数据库加密 前言: 上篇文章讲了Android studio+SQLCipher加密SQLite数据库的几个坑,跳过这几个坑,那么SQLCipher ...
- android SQLite数据库的使用
今天,简单讲讲android如何使用SQLite数据库. 最近,自己在做一个功能时又用到了SQLite数据库,发现自己还是掌握的不很全面.其实之前的app里面也一直用到了数据库,但是自己没有花时 ...
- Android SQLite 数据库详细介绍
Android SQLite 数据库详细介绍我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软 ...
- android 获取位置数据库,尝试从webview获取位置时,Android“SQLite数据库无法从/CachedGeoposition.db加载”错误...
我正在创建一个使用webkit和chrome客户端的android应用程序.我希望能够在网页请求时获取当前位置.我设置的网页适用于普通浏览器就好了.然而,当我尝试访问该网页WebKit中,我不断收到此 ...
- [Android]SQLite的使用
Android 数据存储提供了四种存储方式: Shared Preferences 使用键值对(Map(key, value))来存储数据 Internal Storage 内部存储,存储在设备内存的 ...
最新文章
- ggplot2版聚类物种丰度堆叠图
- Python基础语法学习笔记
- 第一次,人类在人工神经网络中发现了“真”神经元
- 基于JavaWeb实现学校网站开发
- python菜鸟excel教程-Python操作Excel的Xlwings教程(一)
- VC++把输入的字符转换为十六进制
- java的xms与xmx和服务器内存_JAVA_OPTS参数-Xms和-Xmx的作用
- html里的value什么含义,HTML input value属性表示什么
- linux centos7 mysql_Linux centos7环境下安装MySQL的步骤详解
- 依赖注入的几种形式及场景
- asp.net core后台系统登录的快速构建
- python读取csv画图datetime_python – CSV数据(Timestamp和事件)的时间表绘图:x-label常量...
- hibernate中的一对多和多对多的映射关系
- JAVA输出1 10与5相乘的结果_完美起航-用java数组展示计算机的多位数相乘
- Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(12) - 预取指令与SFENCE指令
- loadrunner-4-4事务摘要分析
- MSE(Media Source Extensions)介绍
- android定位欺骗,1020. Android GPS定位欺骗(模拟定位)的3类途径4种方式
- 质性数据分析软件NVivo的许可
- python cnn识别图像_用CNN识别CT图像检测肺癌