gpt4 book ai didi

java - SQLite 数据库查询只返回一行

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:27 24 4
gpt4 key购买 nike

下面是我用来获取存储在 SQLite 表中的所有结果的代码。我遇到的问题是,当我知道数据库中有 21 行时,它只返回一行。

public HashMap<String, String> fetchResults(String TABLE_NAME, String sql) {
HashMap<String, String> table = new HashMap<String, String>();
if(sql == null)
sql = "";
String selectQuery = "SELECT * FROM " + TABLE_NAME + " " + sql;

SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);

String[] columns = null;
switch(TABLE_NAME ){
case "projects":
columns = dbTables.projectsColumns;
break;
}



// Move to first row
cursor.moveToFirst();
if (cursor.getCount() > 0) {

int n=1;
for(int i=0; i<columns.length; i++){
table.put(columns[i], cursor.getString(n));
n++;
}

}
//move to the next row
cursor.moveToNext();

cursor.close();
db.close();
// return user
Log.d(TAG, "Fetching " + TABLE_NAME + " from Sqlite: " + table.toString());

return table;
}

数据库调用是在一个 fragment 中进行的,看起来像这样。

HashMap<String, String> projects = db.fetchResults(dbTables.TABLE_PROJECTS, null);


for (String key : projects.keySet()) {

if(key == "projectname"){
System.out.println("Key: " + key + ", Value: " + projects.get(key));
menuList.add(projects.get(key));
}
}

最佳答案

你在那里只检索一行:

// Move to first row
cursor.moveToFirst();
if (cursor.getCount() > 0) {
int n=1;
for(int i=0; i<columns.length; i++){
table.put(columns[i], cursor.getString(n));
n++;
}
}

您必须迭代游标才能获得所有结果:

// Move to first row
cursor.moveToFirst();
if (cursor.getCount() > 0) {
while(cursor.moveToNext()) {
for (int i = 0; i < columns.length; i++) {
table.put(columns[i], cursor.getString(i));
}
}
}

但是您的表格会列出每一行的所有列值。如果您想要一个包含行条目的表,请定义一个用于存储列值的类。

关于java - SQLite 数据库查询只返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30736657/

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