`
zhouxin464585932
  • 浏览: 76139 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Content Provider基础之SQL

阅读更多

Keywords: content provider, SQL, SQLite
这篇文章是Content Provider系列的第二篇,最近由于事务繁忙(给自己找个理由)没能更新博客,罪过啊。不说废话,进入正题。
由于Content Provider的实现大都是通过数据库的方式实现的,因此在搞清楚CP之前,首先要弄明白数据库语言SQL。Android平台上使用的数据库管理系统是SQLite,该系统不用我介绍了吧,知名,非常的知名,很多嵌入式系统都在用。有兴趣的朋友可以上他们的官网看看,有很多有用的信息:http://www.sqlite.org/docs.html
SQLite使用的SQL语言与标准的SQL语言大体是相同的,所以我想先回顾下SQL语言的用法。

首先我们假设我们有如下表格,表格名称“Employees”:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

SQL基本格式如下:

Sql代码
SELECT 列名称 FROM 表名称

SELECT 列名称 FROM 表名称 最基本SQL语句,就是从表中选取要返回的列数据,不加任何过滤条件。当然如果我们的“列名称”是"*",那么将返回整个表格数据。在Android上,SQL相关的method通常有一个参数就是String[] columns,而这个参数对应的就是SQL语句中的“列名称”。我们可以看一个Android中的method - query:

Java代码
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs,
String groupBy, String having, String orderBy, String limit)

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs,
String groupBy, String having, String orderBy, String limit)
假设我们想获取人员的全名,那么SQL语句如下:

Sql代码
SELECT FirstName, LastName FROM Employees

SELECT FirstName, LastName FROM Employees 当然一般地我们会有条件的过滤我们想要的结果,例如我只想返回city为Beijing的人员信息,那么我就需要用WHERE来过滤:

Sql代码
SELECT * FROM Employees WHERE City='Beijing'

SELECT * FROM Employees WHERE City='Beijing' 这里where后面跟的字符串就是Android的method中对应得参数String selection。Android的method中通常还有个参数与此相关就是 String[] selectionArgs。偶最开始一直没有弄明白这个参数是干啥用的,后来才逐渐明白了这个参数实际上是跟selection参数密不可分的。当selection参数中包含问号"?"时,那么selectionArgs才会用到。举个例子假设selection参数赋值如下:

Java代码
String selection = ”City=?";

String selection = ”City=?"; 这时我们必须在selectionArgs中赋值

Java代码
String[] selectionArgs = {"Beijing"};

String[] selectionArgs = {"Beijing"}; 也就是说selectionArgs中的字符串就是对应selection中的问号所代表的变量。实际上就是让selection中的过滤条件City可以动态的赋值,而不是写死在程序当中。

那么很显然参数String groupBy就是对应SQL语句中GROUP BY后面的字符串,GROUP BY是与合计函数(Aggregate Functions)如SUM()一起使用的。详细的用法大家可以从网上查查。

参数String having对应SQL语句HAVING后面的字符串,也是要与合计函数一起使用的。

参数String orderBy对应SQL语句ORDER BY后面的字符串。

参数limit指明返回的rows的数量。

我们下面举个例子,假设有如下数据表,表名"Orders":

Id CustomerName OrderPrice Country OrderDate
1 Arc 100 China 2010/1/2
2 Bor 200 USA 2010/3/20
3 Cut 500 Japan 2010/2/20
4 Bor 300 USA 2010/3/2
5 Arc 600 China 2010/3/25
6 Doom 200 China 2010/3/26

假设我们想查询客户总的订单数在500元以上的,且County在中国的客户的名称和订单总数,且按照CustomerName来排序,默认ASC排序,那么SQL语句应当是:

Sql代码
SELECT CustomerName, SUM(OrderPrice) FROM Orders WHERE Country=?
GROUP BY CustomerName
HAVING SUM(OrderPrice)>500
ORDER BY CustomerName

SELECT CustomerName, SUM(OrderPrice) FROM Orders WHERE Country=?
GROUP BY CustomerName
HAVING SUM(OrderPrice)>500
ORDER BY CustomerName
那么对应Android的query函数的参数如下:

Java代码
String table = "Orders";
String[] columns = new String[] {"CustomerName", "SUM(OrderPrice)"};
String selection = "Country=?";
String[] selectionArgs = new String[]{"China"};
String groupBy = "CustomerName";
String having = "SUM(OrderPrice)>500";
String orderBy = "CustomerName";
Cursor c = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, null);

String table = "Orders";
String[] columns = new String[] {"CustomerName", "SUM(OrderPrice)"};
String selection = "Country=?";
String[] selectionArgs = new String[]{"China"};
String groupBy = "CustomerName";
String having = "SUM(OrderPrice)>500";
String orderBy = "CustomerName";
Cursor c = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, null); 查询的结果应该是:

CustomerName SUM(OrderPrice)
Arc 700

OK,通过上述例子,大家应该很清楚怎么在Android中使用SQL了,之后我会更详细的介绍Android中相关的类和Method。

分享到:
评论

相关推荐

    content provider 和sqllite用法整理

    content provider和sqlite的详细介绍以及用法。。很好的资源,我自己整理的,相当有用,大家可以看看哈。。

    ContentProvider

    <provider android:name=".provider" android:authorities="com.example.tigongzhe.provider" android:multiprocess="true" android:exported="true" android:permission="com.example.tigongzhe.permission" ...

    contentprovider

    在Content Provider中使用的查询字符串有别于标准的SQL查询 很多诸如select add delete modify等操作我们都使用一种特殊的URI来进行 这种URI由3个部分组成 “content: ” 代表数据的路径 和一个可选的标识数据的ID ...

    Content_Providers.zip

    Kooboo CMS配置数据库所需的文件,支持Msql,SQLServer等数据库。

    contentProvider,sqlit例子

    android数据库存储的综合例子,可以通过这个Dome很好的学习一下android数据库的存储方式

    Android代码-ContentProviderHelper

    Content Provider Helper ... is a frontend to discover/view/query data of android content providers. Original repository : Copyright (c) 2014-2016 Jens Driller under MIT license Improvements in this ...

    详解Android中一些SQLite的增删改查操作

    包括:SharePreference,SQLite,Content Provider,File。 在Android,数据都是么私有的,要实现数据共享,正确方式是使用Content Provider。 SQLite: SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用的...

    Android开发资料合集-World版!

    2.4、CONTENT PROVIDER 35 3、ANDROID UI LAYOUT 35 3.1、概述 35 3.2、线性布局(LINEAR LAYOUT) 36 3.3、相对布局(RELATIVE LAYOUT) 39 3.4、TABLELAYOUT 40 3.5、ABSOLUTELAYOUT 47 4、ANDROID UI 控件 48 4.1...

    mybatis自动生成工具

    sql : cn.org.rapid_framework.generator.provider.db.sql.model.Sql 4.公共变量 env : 系统环境变量 System.getProperties() : 直接引用,没有前缀 generator.properties 文件中的所有属性,直接引用,没有...

    老罗android开发视频教程全集百度网盘下载

    Android基础阶段:平台架构特性(JAVA/C) Market/应用程序组件 环境搭建与部署/打包与发布 AVD/DDMS/AAPT 调试与测试 相关资源访问/资源制作 Activity/Service/Broadcast Receiver/Content Provider/原理(生命周期)及...

    C#实现客户端数据导入导出源代码及说明文档

    string strCon = "Provider=Microsoft.Jet.Oledb.4.0;"+"Data Source="+savePath+";Extended Properties='Excel 8.0;HDR=yes;IMEX=1'"; OleDbConnection odc=new OleDbConnection(strCon); odc.Open(); string ...

    System.Data.Silverlight V2.0

    DbConnection conn = new DbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|SoundEvents.mdb;"); //SQL Server无须做如下两步设置 //设置使用的数据访问程序集 conn.AssemblyName =...

    JAVA代码生成工具

    sql : cn.org.rapid_framework.generator.provider.db.sql.model.Sql 4.公共变量 env : 系统环境变量 System.getProperties() : 直接引用,没有前缀 generator.properties 文件中的所有属性,直接引用,没有...

    Professional ASP.NET 3.5 SP1 Edition: In C# and VB(part1)

    Packed with valuable coverage of ASP.NET 3.5 SP1, this essential resource offers both C# and VB examples throughout the book, and shares new and updated content on the ADO.NET Entity Framework, ADO...

    网上图书销售数据库+ASP

    '-------------------------------------------------------------------- ' Microsoft ADO ' ...' ' ' ' ADO constants include file for VBScript ' '------------------------------------------------------------...

    jdk-9.0.1_doc-all 最新版

    Defines APIs for playback of media and audio content, as part of the JavaFX UI toolkit, including MediaView and MediaPlayer. javafx.swing Defines APIs for the JavaFX / Swing interop support included ...

    Silverlight 4: Problem - Design - Solution

    * Includes step-by-step deployment instructions to host the site with a real shared hosted provider, Discount ASP.NET Wrox Problem – Design – Solution references give you solid, workable solutions ...

    spring security 参考手册中文版

    40.3.4 Microsoft SQL Server 279 40.3.5 Oracle数据库 280 41.安全命名空间 282 41.1 Web应用程序安全性 282 41.1.1 <debug> 282 41.1.2 <http> 282 属性 283 的子元素 285 41.1.3 <access-denied-handler> 286 的...

    Silverlight 4 Problem - Design - Solution.pdf

    Along the way, the book addresses important design considerations, such as the use of Web Services and the SQL Server database. Uses the popular Problem – Design – Solution format show you how to ...

    Microsoft SharePoint 2010 Developer Reference

    Part I Getting Started 1 Introducing Microsoft SharePoint 2010...Custom Document ID Provider 414 File Conversion Services . 417 Word Automation Services . 417 Summary . . . . . . . . . . . . . . . . . . ...

Global site tag (gtag.js) - Google Analytics