热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL和sqlite3都返回`count(*)`的正确结果.SQLiteforAndroid总是返回1.这怎么可能?为什么不是一个bug?

如何解决《SQL和sqlite3都返回`count(*)`的正确结果.SQLiteforAndroid总是返回1.这怎么可能?为什么不是一个bug?》经验,为你挑选了1个好方法。

请考虑此计划细分:

Cursor cursor = mDatabase.query(TABLE_NAME, mColumns, null, null,null, null, null);
int nRows = cursor.getCount();

请注意,从Log下面的输出中,这会将正确的行数返回到nRows-86000.

以下是任何精通SQL的开发人员都希望将86000返回到x:

Cursor c2 = mDatabase.rawQuery("select count(*) from " + TABLE_NAME, null);
int x = c2.getCount();

这就是为什么他们会期望--sqlite3.exe产生这样的结果:

sqlite> select count(*) from wordlist;
86000

但是,xAndroid SQLite 返回的结果是1.

Log是上面代码底部的语句:

Log.w("`````dbDump","rows: " + nRows + " or is it " + x + " rows?");

这是它的输出:

W/`````dbDump: rows: 86000 or is it 1 rows?

答案是数据库有86000行,而不是1.

我的问题很简单(并在标题中说明):

为什么有人试图(即使松散地)模拟SQL设计常用函数,例如count(*)总是返回相同的值?

如果你选择向我投票,请继续,但请回答这个问题.这似乎是一个错误,因为没有人会期望任何函数总是返回一个恒定的结果.

像问题类似的Gripes:

如果真的在某处记录并且你找到它,你会期望总是返回1.在那种情况下,在哪里?(URL,好吗?)

是否真的有count(*)用来永远返回1?(我想一个答案可能是删除它或使其正常工作需要重大改写.)

如果你不认为这些是合法的问题,那么你并没有花太多时间试图找出你做错了什么,事实证明,这只是简单地使用SQL知识和rawQuery.



1> Eugen Pechan..:

这段代码

Cursor c2 = mDatabase.rawQuery("select count(*) from " + TABLE_NAME, null);

给你一行一列,count(*)是位置[0,0]的值.

Cursor.getCount() 返回结果中的行数,在此特定情况下为1.

获得你打电话的价值

c2.moveToFirst(); // Move to first row.
int count = c2.getInt(0); // Get value as integer from first column of current row.


应该提到[longForQuery()](https://developer.android.com/reference/android/database/DatabaseUtils.html#longForQuery(android.database.sqlite.SQLiteDatabase,%20java.lang.String,%20java.lang) .String []))和[queryNumEntries()](https://developer.android.com/reference/android/database/DatabaseUtils.html#queryNumEntries(android.database.sqlite.SQLiteDatabase,%20java.lang.String) ).
推荐阅读
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文介绍了如何在 Spring 3.0.5 中使用 JdbcTemplate 插入数据并获取 MySQL 表中的自增主键。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 通过使用Sqoop导入工具,可以精确控制并高效地将表数据的特定子集导入到HDFS中。具体而言,可以通过在导入命令中添加WHERE子句来指定所需的数据范围,从而在数据库服务器上执行相应的SQL查询,并将查询结果高效地存储到HDFS中。这种方法不仅提高了数据导入的灵活性,还确保了数据的准确性和完整性。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
author-avatar
本多天舞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有