• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用,

Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用,

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android开发sqlite,android开发,android开发环境搭建,android开发工具,android开发教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用,


前言

  啦啦啦各位小伙伴们许久不见了~学期末和过年期间自己忙着做其他事没能及时更新Android开发系列课程的博客,实在是罪过罪过~

好啦~废话不多说,进入我们今天的主题。今天我们将和大家学习其他的数据存储的方法,一起来学习SQLite数据库和ContentProvider的使用,复习Android界面编程等知识。

基础知识

  SQLite

一. SQLite的介绍

1.SQLite简介

      SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入  式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java、C++、.Net等,还有ODBC接口,同样比起 Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

2.特点:

  轻量级——SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态  库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。

  不需要"安装"——SQLite的核心引擎本身不依赖第三方的软件,使用它也不需要"安装"。有点类似那种绿色软件。

  单一文件——数据库中所有的信息(比如表、视图等)都包含在一个文件内。这个文件可以自由复制到其它目录或其它机器上。

  跨平台/可移植性——除了主流操作系统 windows,linux之后,SQLite还支持其它一些不常用的操作系统。

  弱类型的字段——同一列中的数据可以是不同类型。

  开源

 

二. SQLiteDatabase的介绍

  Android提供了创建和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。

1、打开或者创建数据库

  在Android 中使用SQLiteDatabase的静态方法openOrCreateDatabase(String  path,SQLiteDatabae.CursorFactory  factory)打开或者创建一个数据库。它会自动去检测是否存在这个数据库,如果存在则打开,不存在则创建一个数据库;创建成功则返回一个SQLiteDatabase对象,否则抛出异常FileNotFoundException。

下面是创建名为“stu.db”数据库的代码:
  openOrCreateDatabase(String  path,SQLiteDatabae.CursorFactory  factory)

  参数1  数据库创建的路径

参数2  一般设置为null就可以了

db=SQLiteDatabase.openOrCreateDatabase("/data/data/com.lingdududu.db/databases/stu.db",null);  

 

2、创建表

创建一张表的步骤很简单:

  编写创建表的SQL语句

  调用SQLiteDatabase的execSQL()方法来执行SQL语句

下面的代码创建了一张用户表,属性列为:id(主键并且自动增加)、sname(学生姓名)、snumber(学号)

private void createTable(SQLiteDatabase db){   
//创建表SQL语句   
String stu_table="create table usertable(_id integer primary key autoincrement,sname text,snumber text)";   
//执行SQL语句   
db.execSQL(stu_table);   
}

 

3、插入数据

插入数据有两种方法:

①SQLiteDatabase的insert(String table,String nullColumnHack,ContentValues  values)方法,
    参数1  表名称,
    参数2  空列的默认值
    参数3  ContentValues类型的一个封装了列名称和列值的Map;


②编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行

 

第一种方法的代码:

private void insert(SQLiteDatabase db){   
//实例化常量值   
ContentValues cValue = new ContentValues();   
//添加用户名   
cValue.put("sname","xiaoming");   
//添加密码   
cValue.put("snumber","01005");   
//调用insert()方法插入数据   
db.insert("stu_table",null,cValue);   
}   

 

    第二种方法的代码:

private void insert(SQLiteDatabase db){   
//插入数据SQL语句   
String stu_sql="insert into stu_table(sname,snumber) values('xiaoming','01005')";   
//执行SQL语句   
db.execSQL(sql);   
}  

 

4、实现增加、更新和删除这 3 种操作有两种方法:

不管是哪种方法,记得先 getWritableDatabase()

(a)用 execSQL 方法直接执行相应的 SQL 语句,比如增加(如下)。

SQLiteDatabase db = getWritableDatabase();
String insert_sql="INSERT INTO <表名>(<列 1>,<列 2>,…)values(<值 1>,<值 2>,…)";
db.execSQL(insert_sql);

(b)使用相应的 insert、update 和 delete 方法

I.insert 方法需要使用 ContentValues 来存放要添加的数据,见下图

II.update 方法需要使用 ContentValues 和 Where 语句。(下图只是说明性代码)

III、delete 方法需要使用 where 语句。(下图只是说明性代码)

 

5、查询数据

  实现查询操作可以使用 rawQuery 或 query 函数,它们的区别类似于上面,前者直接执行
SQL 语句,后者是通过参数组合产生 SQL 语句。(下图只是说明性代码)
  进行查询前,记得先 getReadableDatabase()

  rawQuery 或者 query 函数返回的都是 Cursor,关于 Cursor 类的详细介绍请看下面
的链接:

http://www.cnblogs.com/TerryBlog/archive/2010/07/05/1771459.html

 

三. SQLiteOpenHelper

  该类是SQLiteDatabase一个辅助类。这个类主要生成一  个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase()或者 getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生成一个数据库。 SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里面的3个函数:

1.onCreate(SQLiteDatabase)

  在数据库第一次生成的时候会调用这个方法,也就是说,只有在创建数据库的时候才会调用,当然也有一些其它的情况,一般我们在这个方法里边生成数据库表。

2.  onUpgrade(SQLiteDatabase,int,int) 


  当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表,当然是否还需要做其他的操作,完全取决于应用的需求。

3.  onOpen(SQLiteDatabase):

  这是当打开数据库时的回调函数,一般在程序中不是很常使用。

 

Content Provider 使用

1.适用场景

  1) ContentProvider为存储和读取数据提供了统一的接口

  2) 使用ContentProvider,应用程序可以实现数据共享

  3) android内置的许多数据都是使用ContentProvider形式,供开发者调用的(如视频,音频,图片,通讯录等)

 

2.ContentProvider简介

       当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。

 

  3.使用 getContentResolver 方法读取联系人列表

Cursor cursor =getContentResolver().query(ContactsContract.Contacts. CONTENT_URI , null,  null,  null,  null);

 

判断某条联系人的信息中,是否有电话号码。

int isHas =Integer. parseInt (cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts. HAS_PHONE_NUMBER )));

 

取出该条

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android开发8:数据存储(二)——SQLite数据库和ContentProvider的使用,
  • android开发之路09(浅谈SQLite数据库01),androidsqlite

相关文章

  • 2017-05-26手机影音6--视频播放器的基本功能(3),6--基本功能
  • 2017-05-26android View绘制源码分析
  • 2017-05-26Android WebView远程代码执行漏洞简析
  • 2017-05-26Android 手机卫士--绑定sim卡序列号,androidsim
  • 2017-05-26Android蓝牙技术Bluetooth使用流程(详解)
  • 2017-05-26认识一下Kotlin语言 Android平台的Swift
  • 2017-05-26nginx设置泛域名解析的https证书过程
  • 2017-05-26安卓界面组件----列表视图,安卓组件----视图
  • 2017-05-26Android体系结构,android体系结构介绍
  • 2017-05-26Android 性能分析工具之 TraceView 使用说明

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 找不到draw9patch.bat?已经不用找了,draw9patch.bat
    • Spider引擎分布式数据库解决方案(最全的spider教程)
    • Android开发:JSON简介&amp;Gson、AS自带org.son、Jackson解析详解
    • 自定义控件(一),自定义控件(
    • 可伸缩的textview,伸缩textview
    • 解决Android后台清理APP后,程序自动重启的问题,androidapp
    • 我的第一节Android课,第一节Android课
    • 贡献个Android 截屏并自动传到电脑上的shell脚本
    • Android小项目:计算器
    • Android性能优化之Bitmap的内存优化

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有