Sqlite中如何返回唯一数据

转载 2015年07月09日 00:41:27
SQLiteDatabase的Query方法都固定好参数了,distinct好像加不进去。
如果用execSQL方法在Select后面带上distinct,返回结果为void,得不到Cursor。

请问在Sqlite中怎样才能去掉重复得到唯一数据。


方案:

SQLiteDatabase类另有一个rawQuery方法,可以用自定义的SQL语句进行查询,返回Cursor类型。用这个方法可以进行稍微复杂一点的查询了。


SQLiteDatabase的rawQuery()用于执行select语句,使用例子如下:

<a target=_blank href="http://www.iteedu.com/handset/android/sqlitediary/SQLiteDatabase.php" style="color: rgb(51, 102, 153); text-decoration: none;">SQLiteDatabase</a> db= ....;
<a target=_blank href="http://www.iteedu.com/handset/android/sqlitediary/Cursor.php" style="color: rgb(51, 102, 153); text-decoration: none;">Cursor</a> cursor = db.rawQuery("select * from person",null);
...
cursor.close();
db.close();
rawQuery()方法的第一个参数为select语句;第二个参数为select语句中占位符参数的值,如果select语句没有使用占位符,该参数可以设置为null。带占位符参数的select语句使用例子如下:

<a target=_blank href="http://www.iteedu.com/handset/android/sqlitediary/Cursor.php" style="color: rgb(51, 102, 153); text-decoration: none;">Cursor</a> cursor = db.rawQuery("select * from personwhere name like ?and age=?", new String[]{"%iteedu%", "4"});


对于Android平台上的数据库而言使用了嵌入式越来越流行的SQLite,为了更好的跨平台我们推荐大家使用原始SQL语句直接操作,在代码和处理效率上都有不小的提高,不过要做好SQL语句异常处理。

下面我们说下rawQuery的好处,可以看到查询的代码直接使用SQL语句,通过性能实测效率比Android封装过的类要快不少,但不能配合一些 Adapter的使用,不过总体上在跨平台上很突出,下面为本地使用方法的伪代码,没有做任何构造和实例化,希望让项目经理知道rawSQL的优势在 Android平台上的使用。

  1. SQLiteDatabase db;
  2.   String args[] = {id};
  3.   ContentValues cv = new ContentValues();

  4.   cv.put("android123", id);
  5.   Cursor c = db.rawQuery("SELECT * FROM table WHERE android123=?", args); 执行本地SQL语句查询

  6.   if (c.getCount() != 0) {
  7.     //dosomething

  8.   ContentValues cv = new ContentValues();
  9.   
  10.   cv.put("android123","cwj");
  11.   db.insert("table", "android123", cv);  //插入数据

  12.   String args[] = {id};
  13.   ContentValues cv2= new ContentValues();
  14.   
  15.   cv2.put("android123", id);
  16.   db.delete("table", "android123=?", args); //删除数据

  17.   }

sqlite3返回码

sqlite常量的定义: const SQLITE_OK = 0; 返回成功 SQLITE_ERROR = 1; SQL错误或错误的数据库 SQLITE_INTERNAL = 2; An in...
  • wangcg123
  • wangcg123
  • 2016年11月10日 16:39
  • 649

Sqlite3的简单用法,得到行数和列值【附源码和文件】

测试环境:VC6.0 代码走起: #include #include #pragma comment(lib,"sqlite3.lib")2 #include "sqlite3.h" vo...
  • u013100446
  • u013100446
  • 2014年12月30日 18:59
  • 3361

sqlite3返回码

sqlite常量的定义: const SQLITE_OK = 0; 返回成功 SQLITE_ERROR = 1; SQL错误或错误的数据库 SQLITE_INTERNAL = 2; An in...
  • wangcg123
  • wangcg123
  • 2016年11月10日 16:39
  • 649

Python查询Mysql, sqlite时返回字典结构的代码

MySQLdbMySQLdb默认查询结果都是返回tuple,输出时候不是很方便,必须按照0,1这样读取,无意中在网上找到简单的修改方法,就是传递一个cursors.DictCursor就行。默认程序:...
  • u011956172
  • u011956172
  • 2016年12月27日 19:14
  • 1849

SQLite数据库约束详解

一、约束 Constraints 在SQLite数据库中存储数据的时候,有一些数据有明显的约束条件。 比如一所学校关于教师的数据表,其中的字段列可能有如下约束: 年龄 - 至少大于20岁。...
  • chaoyu168
  • chaoyu168
  • 2016年01月06日 16:54
  • 1835

sqlite获取 sqlite3_step 结果中的某列的值

首先执行 sqlite3_prepare_v2 再执行 sqlite3_step 然后 -----------------------------------------------------...
  • szcarewell
  • szcarewell
  • 2016年04月20日 21:48
  • 2347

Sqlite插入、修改、删除表里面的数据

一、插入数据 INSERT INTO 表(列...) VALUES(值...) 根据前面几篇的内容,我们可以很轻送的创建一个数据表,并向其中插入一些数据,不多说,看例子: myqiao@u...
  • nokiaxjw
  • nokiaxjw
  • 2014年05月10日 10:38
  • 9688

C++操作SQLITE获得查询结果集的几种方法总结

使用sqlite的时候对查询结果的获得一直感觉比较混乱,一通google后收益匪浅,在此做个笔记。参考原文: http://www.cnblogs.com/acloud/archive/2012/0...
  • jqsad
  • jqsad
  • 2016年06月29日 12:05
  • 11210

Qt 操作sqlite总结

原文地址:http://blog.csdn.net/NewBee520/article/details/8247236 QSqlDatabase类实现了数据库连接的操作 QSqlQuery类用来执行S...
  • G1036583997
  • G1036583997
  • 2016年01月14日 09:24
  • 3802

sqlite插入自增长标识字段,获得新id

sqlite的语法和sql server的语法是有一些区别的,比如插入数据,对于标示种子的字段,必须指定为NULL,而获得新id,在sql server中是 SELECT @@IDENTITY [i...
  • fangjjj
  • fangjjj
  • 2014年06月24日 13:54
  • 3104
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Sqlite中如何返回唯一数据
举报原因:
原因补充:

(最多只允许输入30个字)