开发者社区> 文艺小青年> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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):获取该行的指定列的数据。

示例:创建一个数据库并往其中插入数据。

Java Code

  PS:通过File Explorer查看Android模拟器文件,发现新创建的数据库文件在data/data/<package name>/files/目录下面。

  总结起来,使用SQLiteDatabase对象进行SQLite数据库操作的大致步骤如下:

  1. 获取SQLiteDatabase对象,它代表了与SQLite数据库的连接。
  2. 调用SQLiteDatabase对象的方法来执行SQL语句。
  3. 操作SQL语句的执行结果。
  4. 关闭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数据库代码优化(2) - 从SQLite说起
如果没有SQLite的基础,我们只是从Android封装的SQLite API去学习的话,难免思路会受到限制。所以,我们还是需要老老实实从头开始学习SQLite. 当我们有一身的SQLite武功之后,再去看Android的封装,就能更清楚如何发挥SQLite的特长。
1360 0
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
88 0
Android开发之ListView使用经验分享
在Android开发中,ListView是使用最广泛的组件之一,虽然谷歌推出了RecycleView,但是很多项目中依旧在使用ListView,本文将总结一下使用过程中遇到的一些问题,与大家共勉~~~ 一、ListView 与 Adapter List...
760 0
Android开发重要参考资料
=======================博客============================= 秋百万 有心课堂 郭霖 源码 安装ffmpeg 胡凯 官方培训课程 litesuitsway 爱哥 trinea robinRobin Hu...
828 0
3576
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载