gpt4 book ai didi

android - 统计sqlite数据库中表的个数

转载 作者:IT王子 更新时间:2023-10-29 06:22:09 24 4
gpt4 key购买 nike

我需要对当前在我的 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_metadatasqlite_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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com