当前位置: 首页 > 编程日记 > 正文

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,如需转载请自行联系原作者


相关文章:

pku 3422 Kaka's Matrix Travels 最大费用最大流

http://poj.org/problem?id3422 /* 题意&#xff1a;给定一个n*n的矩形方格&#xff0c;要求从&#xff08;1,1&#xff09;出发&#xff0c;只能往右下角走&#xff0c;(i 1,j) 或者 &#xff08;i n,j&#xff09;每次走完将格子里面的数累加&#xff0c;并将所走过的格子…

【青少年编程】全国青少年软件编程等级考试大纲与说明(Scratch)

Scratch竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 后台回复 资料下载 可获取该考试大纲与说明的PDF版本。

前端中的this,指的是什么?

想要学习前端&#xff0c;短时间内是比较困难的&#xff0c;web前端要学习的内容有很多&#xff0c;今天小编就为大家详细的介绍一下前端中的this&#xff0c;指的是什么?来看看下面的详细介绍。 前端中的this&#xff0c;指的是什么? 1.this是什么 this 是 JavaScript 中的一…

在SQLserver数据库里设置作业的步骤

在SQLserver数据库里设置作业&#xff08;对数据库的表定期进行数据清理&#xff09;的步骤 1.首先&#xff0c;要打开sql server代理的服务&#xff0c;在我的电脑&#xff0c;右键管理的服务打开&#xff0c;SQL Server 代理 (MSSQLSERVER)这个服务一定要打开。2.打开数据库&…

tomcat环境部署

1、java安装 #java env export JAVA_HOME/usr/local/src/jdk1.8.0_162 export JRE_HOME$JAVA_HOME/jre export PATH$JAVE_HOME/bin:$JAVA_HOME/bin:$PATH export CLASSPATH.:$JAVA_HOME/lib:$JAVA_HOME/lib 2、下载tomcat wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat…

【青少年编程】【一级】舞者凯希

Scratch竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&#xff09;。 舞者凯…

UI设计APP图标设计规范介绍

​ UI设计所涉及的内容是比较多的&#xff0c;其中关于APP图标的设计就是常见的一种&#xff0c;UI设计师需要掌握不同的UI设计规范。今天小编就帮助大家了解下移动端APP图标设计规范&#xff1a; 很多设计师以为UI设计就是设计图标。虽然事实并非如此&#xff0c;但图标的设计…

Linux中断(interrupt)子系统之一:中断系统基本原理【转】

转自&#xff1a;http://blog.csdn.net/droidphone/article/details/7445825 这个中断系列文章主要针对移动设备中的Linux进行讨论&#xff0c;文中的例子基本都是基于ARM这一体系架构&#xff0c;其他架构的原理其实也差不多&#xff0c;区别只是其中的硬件抽象层。内核版本基…

haskell的分数运算

孩子要上3年级了&#xff0c;里面涉及分数的部分&#xff0c;先准备一下。 haskell中涉及分数的模块是Ratio。 Ratio Synopsis Documentation data Ratio a Rational numbers, with numerator and denominator of some Integral type. Instances Typeable1 Ratio Integral a &g…

【复盘】端端,棒棒哒!

Scratch竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&#xff09;。 昨晚2…

UI设计培训分享:平面广告设计中的文案表达技巧

UI设计培训包含平面设计&#xff0c;而且其中的应用频率是非常大的&#xff0c;本期小编就为大家详细的介绍一下平面广告设计中的文案表达技巧&#xff0c;希望下面的介绍能够帮助到正在学习UI设计的同学们。 平面广告设计中的文案表达技巧&#xff0c;平面广告中文案的编排创意…

工具类——md5

android的开发过程中&#xff0c;数据安全始终是个问题。这里记录一个md5的工具类&#xff0c;感觉挺好用的。 package com.xzw.test; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class TestMD5 { public static…

【青少年编程】【一级】小狗散步

Scratch竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&#xff09;。 小狗散…

avplayer VS2008编译

错误1. typedef void * POINTER_64 PVOID64;  解决办法 typedef void *PVOID;typedef void * POINTER_64 PVOID64;在它之前加下&#xff1a;#define POINTER_64 __ptr64 官网给出的解决办法 打开winnt.h文件&#xff08;这个是vc安装时带的文件&#xff09; 找到 #include <…

Python培训分享:python爬虫可以用来做什么?

爬虫又被称为网络蜘蛛&#xff0c;它可以抓取我们页面的一些相关数据&#xff0c;近几年Python技术的到来&#xff0c;让我们对爬虫有了一个新的认知&#xff0c;那就是Python爬虫&#xff0c;下面我们就来看看python爬虫可以用来做什么? Python培训分享&#xff1a;python爬虫…

【字符串操作之】返回指定位置的字符和Unicode 字符代码 根据unicode返回字符→→charAt、charCodeAt和fromCharCode...

//charAt和charCodeAt分别返回指定位置处的字符和字符对应的unicode码 var str:String"abcdefg"; var str2str.charAt(1); var str3str.charCodeAt(1); trace(str2); //b trace(str3); //98 fromCharCode是个静态方法&#xff0c;根据unicode返回字符 var str:String…

E667:Fsync failed(how to solve)

今天在学习一个关闭icmp回显的配置时候&#xff0c;vim出现了Fsync failed这个问题&#xff01; 下面来说一下我发生这种情况的原因&#xff08;系统CentOS6.5&#xff09;,那时编辑完后先是输入“q”&#xff0c;正如我们所想&#xff0c;已修改过的配置它会提醒我要把数据写入…

【复盘】第一次灌鸡汤

Scratch竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&#xff09;。 上周日…

Python中常用的数据分析工具(模块)有哪些?

本期Python培训分享&#xff1a;Python中常用的数据分析工具(模块)有哪些?Python本身的数据分析功能并不强&#xff0c;需要安装一些第三方的扩展库来增强它的能力。我们课程用到的库包括NumPy、Pandas、Matplotlib、Seaborn、NLTK等&#xff0c;接下来将针对相关库做一个简单…

Android应用中通过AIDL机制实现进程间的通讯实例

Android中&#xff0c;每个应用程序都有自己的进程&#xff0c;当需要在不同的进程之间传递对象时&#xff0c;该如何实现呢&#xff1f;显然&#xff0c;Java中是不支持跨进程内存共享的&#xff0c;因此要传递对象&#xff0c;需要把对象解析成操作系统能够理解的数据格式&am…

06 Scratch等级考试(一级)模拟题

Scratch竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&#xff09;。 这是第…

区分BundleVersion和BundleShortVersionString

区分BundleVersion和BundleShortVersionString最近遇到了关于检查更新的版本问题了。问题出在了Info.Plist配置中的两个字段&#xff0c;BundleVersion和BundleShortVersionString。搞了两年的开发&#xff0c;第一次看到还有另一个字段的版本。由于版本检测升级的问题&#xf…

UI设计培训技术分享:配色秘籍

设计中颜色的使用是一个非常值得关注的问题&#xff0c;同样的构图、版式&#xff0c;但是不同的颜色搭配给人的感觉就完全不一样&#xff0c;色彩的冷暖&#xff0c;明暗变化琳琅满目&#xff0c;表达不同的氛围与情绪&#xff0c;对于新手设计来讲&#xff0c;配色是个不容小…

安全的Web主机iptables防火墙脚本

下面以自己的Web服务器举例说明之&#xff0c;系统的默认策略是INPUT为DROP&#xff0c;OUTPUT、FORWARD链为ACCEPT&#xff0c;DROP设置得比较宽松&#xff0c;因为我们知道出去的数据包比较安全&#xff1b;为了验证脚本的通用性&#xff0c;我特的查看了服务器的内核及iptab…

用户至上-阿里马马篇

最近经常在阿里巴巴的平台里活动&#xff0c;突然发现&#xff0c;支付宝病了。 当用户生成一单交易后&#xff0c;需要用支付宝支付时&#xff0c;如何保证是用户本人在操作呢&#xff1f; 当初&#xff0c;支付宝是国内第一家很好地解决这个问题的。 解决的途径主要是&#x…

【复盘】小朋友的奇思妙想

Scratch竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&#xff09;。 上周日…

UI设计培训技术分享:搞定萌萌哒可爱图标

UI设计要学到的东西有很多&#xff0c;那么关于图标设计就是其中的一种&#xff0c;很多企业比较忠于萌萌哒的可爱图标&#xff0c;那么如何搞定萌萌哒可爱图标呢?来看看下面UI设计培训技术分享教程。 UI设计培训技术分享&#xff1a;搞定萌萌哒可爱图标 萌萌哒的图标制作有三…

远程处理Remoting

日程 ?应用程序域 ?Remoting和原理 ?编程式和管理式配置实例 用应用程序域 操作系统和运行库环境通常会在应用程序间提供某种形式的隔离。例如&#xff0c;Microsoft Windows 使用进程来隔离应用程序。为确保在一个应用程序中运行的代码不会对其他不相关的应用程序产生不良影…

Datawhale组队学习周报(第002周)

Datawhale组队学习周报&#xff08;第002周&#xff09; &#xff08;一&#xff09;当下 本周&#xff08;02月22日~02月28日&#xff09;&#xff0c;我们正在进行5门开源内容的组队学习。一共建立了6个学习群&#xff0c;参与人数1080人。到目前为止&#xff0c;有4门课开…

LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍

LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍 LVS (Linux Virtual Server) LVS&#xff08;Linux Virtual Server&#xff09;其实就是针对高可伸缩、高可用网络服务的需求&#xff0c;给出了基于IP层和基于内容请求分发的负载平衡调度解决方法&#xff0c;…