- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我需要对当前在我的 sqlite 数据库中的表进行计数。尝试搜索但没有得到任何直接方法。
我在我的 DbHelper 中试过这个方法。
public int countTables() {
int count = 0;
String SQL_GET_ALL_TABLES = "SELECT * FROM sqlite_master WHERE type='table'";
Cursor cursor = getReadableDatabase()
.rawQuery(SQL_GET_ALL_TABLES, null);
cursor.moveToFirst();
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
count++;
getReadableDatabase().close();
}
cursor.close();
return count;
}
但是这个方法给了我一个错误的计数。我的数据库中只有 3 个表,但此方法返回计数为 5。此方法可能有什么问题。有什么直接的方法可以得到计数。
最佳答案
你的方法很好,你甚至可以使用SELECT count(*) ...
。但是有两个自动创建的表 android_metadata
和 sqlite_sequence
,只需考虑这些:您创建的 5 - 2 = 3 个表。
或者因为 Squonk 提供了有关何时 sqlite_sequence
的出色文档已创建,当它可能不存在时,我推荐这个查询:
SELECT count(*) FROM sqlite_master WHERE type = 'table' AND name != 'android_metadata' AND name != 'sqlite_sequence';
缩短代码的几点建议
所有这些:
cursor.moveToFirst();
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
可以这样实现:
while(cursor.moveToNext()) {
如果下一行存在,Cursor.moveToNext() 返回真。如果新游标不为空,则 moveToNext() 将返回 true 并将此索引设置在第一个位置。当 cursor.isAfterLast() == true
时,moveToNext() 返回 false。
但是如果您只是想计算 Cursor 中有多少行,请使用:
int count = cursor.getCount();
最后,将您的可写数据库存储在一个变量中。
getReadableDatabase().close();
我还没有测试过这个,但是如果 getReadableDatabase() 每次都返回一个新的 SQLiteDatabase 对象,那么您只是在创建新数据库后立即关闭它...我会关闭数据库一次 并且我会在关闭我从中检索到的所有游标后关闭它。
SQLiteDatabase database = getReadableDatabase();
...
database.close();
如果您使用大量查询,请考虑在 onResume() 中打开数据库并在 onPause() 中关闭它。
关于android - 统计sqlite数据库中表的个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11506527/
我有一张用户表 users +------+ - user_id ... ... - updated_by 据我所知,updated_by 列应该在 user_id 列上引用此表。我不确定,这
我是 SQL 新手,我有 2 个包含这些列的表: table structures__|id|name|nation_id|image| table nations______|id|nation|
我正在使用 codeigniters sql 选择来选择不在一组 id 中的用户。 $this->db->select('fbuid')->where_in('fbuid', $friends); $
找不到具体的答案所以我想问一下。简而言之,我有一个表,它根据存储在我的数据库中的数据从 API 检索信息,我想要做的就是从该表中获取某些列的总数,而不是全部列,以便我可以在其他地方使用它们网站。例如,
这是 phpMyAdmin 为我生成的 SQL 语句: SELECT * FROM `table_name` WHERE 1 可以看到 table_name 被 ` 字符包围。 为什么? 最佳答案 用
我有两个这样的表 我想在这里从 Table1 插入到 Table2。这就是我想要的。 取 MOU = 10。它在同一行中有 num1 和 hour1。我想将它插入到与 num1 同一行与 hour1
我的任务是使用 C++ 编写一个程序,以使用 Gamma 分布计算概率。如果我已经找到函数值,如何将其更改为 Gamma 分布表中的值?我不知道公式。 例如Fg(8;8),在表中为0.5470。而表中
我在查看 HTML 电子邮件时遇到问题,需要格式化 css 以与 HTML 脚本内联。 我有多个表使用的以下 td css。 td.gridtopleft { border-left: solid
我正在使用来自 pip 的最新 sqlalchemy 和最新的 pymssql 连接 mssql 服务器 8.00.2039(2005 年?)困难在于表和列名称是俄语。是否可以用 sqlalchemy
我有一个有趣的问题 - 我需要 JOIN 语句的完全相反。 我有一个名为 invoices 的表和另一个名为 payments 的表。我想按顺序检索没有任何付款的发票,但之后是有付款的行。 发票表有这
我有两个表: 主题:[id, ...] 类别:[主题.id, ...] 我想从表 #1 中选择所有主题,但不包含 #2(类别)中的条目。 任何提示表示赞赏(: 最好的问候 最佳答案 Sachin 已经
MYSQL: 我正在使用表 information_schema.tables 中的 AUTO_INCRMENT 列来获取下一个 id。 如下: SELECT AUTO_INCREMENT FROM
我是一名优秀的程序员,十分优秀!