Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
androidsqlite:连接和游标_Android_Sqlite_Join_Database Cursor - Fatal编程技术网

androidsqlite:连接和游标

androidsqlite:连接和游标,android,sqlite,join,database-cursor,Android,Sqlite,Join,Database Cursor,我在sqlite数据库中有以下表: items ______ _id (PK) name section_subsection_id (FK) section_subsections ______ _id (PK) section_id (FK) subsection_id (FK) subsections ______ _id (PK) name sections ______ _id (PK) name 我想为小节提供一个特定的关键字,它只抓取那些在某个限制下匹配这个关键字的条目,

我在sqlite数据库中有以下表:

items
______
 _id (PK)
name
section_subsection_id (FK)

section_subsections
______
_id (PK)
section_id (FK)
subsection_id (FK)

subsections
______
_id (PK)
name

sections
______
_id (PK)
name
我想为小节提供一个特定的关键字,它只抓取那些在某个限制下匹配这个关键字的条目,比如x,并计算这个小节和小节下匹配的所有条目

我使用了几个查询,下面是一个:

String selectQuery = "Select subsections.name, subsections._id, temp.count as count 
FROM subsections LEFT JOIN 
sections_subsections ON subsections._id = sections_subsections.subsection_id 
JOIN items (SELECT count(items._id) as count from items) temp 
ON items.section_subsection_id = sections_subsections._id 
WHERE subsections.name LIKE 'keyword' AND sections_subsections.section_id = 1 ORDER BY
subsections.name ASC LIMIT 50 OFFSET 0 ";
当我尝试遍历结果时,会得到与关键字搜索匹配的列表,但计数总是显示结果集中的最后一个计数值。当我在sqlite shell中运行原始查询时,我在列中看到了正确的计数以及相应的行,但是在Android/Java中迭代光标似乎有问题。或者可能是我的疑问

所以对于应用程序中的ListView,我会得到相同的计数(全部是20秒),但在shell中,我看到的计数值是正确的。事实上,在游标迭代过程中,如果我将Log.d计数到屏幕上,它也都是20秒,但另一列的值名称是不同的。我的问题出了什么问题?或者如何正确地遍历具有多个联接的表

_id  name    count 
 ---------------   
1    item1   79
2    item2   30
3    item3   20
编辑: 我正在用Java做类似的事情:

Cursor cursor = sqliteDatabase.rawQuery(selectQuery, null);
if (cursor != null) {
cursor.moveToFirst();
}

if (cursor.moveToFirst()) {
do {
SubSection subSection = new SubSection();                      
subSection.setId(cursor.getInt(cursor.getColumnIndex(KEY_ID)));                     subSection.setSubSectionName(cursor.getString(cursor.getColumnIndex(KEY_TABLE_SUBSECTIONS_SUBSECTION_NAME)));
subSection.setRecords(cursor.getColumnIndex("count"));
subSections.add(subSection);
}
while 
(cursor.moveToNext());
}
尝试下面的查询

Select subsections.name, subsections._id, (SELECT count(items._id) from items WHERE items.section_subsection_id = sections_subsections._id) as count 
FROM subsections LEFT JOIN 
sections_subsections ON subsections._id = sections_subsections.subsection_id 
WHERE subsections.name LIKE 'keyword' AND sections.name = 'Category' ORDER BY
subsections.name ASC LIMIT 50 OFFSET 0 ";

谢谢Syed Waqas,你的回答是正确的。问题其实不是我的问题。这是我的电话。我应该使用:
cursor.getInt(cursor.getColumnIndex(“count”))
而不是我原来问题中的内容。我不知道我是怎么没注意到这个大错误的。对于其他人,您可以使用可爱的DataSeutils调试光标。:)


谢谢第二个结束括号应该在哪里?在子查询结束后,您是否运行了代码?好的,我已经尝试过了。返回相同的内容。上次计数结果的值;为了验证,我在游标迭代期间使用了Log:
Log.d(Log,cursor.getColumnIndex(“count”)+)我在sqlite shell中运行了这个sql命令,可以看到正确的计数,就像我以前的查询一样。如果上面的Log.d(Log,cursor.getColumnIndex(“count”)+“”)打印了您期望的内容,那么检查您的模型是否有问题。setRecords(…),请尝试打印Log.d(Log,String.valueOf(subSection.getRecords())若要查看值是否正确分配,请在前台的“您在哪里”子菜单中张贴。否,它不会打印我期望的内容。它将最后一条记录的计数值打印50次,因为我们的限制/结果集为50。我可以通过终端外壳看到我所期望的。
Log.d(LOG, "ROW: " + DatabaseUtils.dumpCursorToString(cursor));