android - androids studio sqlite 问题与 selectionArgs 参数
问题描述
我在 android studio 中有以下函数,它应该返回一个 sqlite 光标。问题出在 selectionArgs 参数中。每当我向它传递多个值时,它都会返回一个带有 0 条记录的游标。
public Cursor getCursor(String strListWhere, String strTable, String strCols) {
String strColsToReturn = mySqliteHandler.getWhereColNamesFromJsonString(strListWhere);
String strArgs = mySqliteHandler.getWhereColArgsFromJsonString(strListWhere);
Log.d(TAG, "qqqq9: " + strArgs);
String strTableName = strTable;
String[] strColumnsToReturn = { strCols };
String strSelectWhere = strColsToReturn ;
String[] strSelectArgs = { strArgs };
Cursor csrResult = sqLiteDatabase.query(true, strTableName, strColumnsToReturn, strSelectWhere, strSelectArgs, null, null, null, null);
Log.d(TAG, "qqqq9: " + csrResult.getCount());
return csrResult;
}
strColsToReturn 中animal_class = ? and province_name = ?
的值是 strArgs 中的值Bird, KwaZulu-Natal
所以我希望它是animal_class = 'Bird' and province_name = 'KwaZulu-natal'
当我只传递一个值时,它会起作用,例如 strColsToReturn 中animal_class = ?
的值是 strArgs 中的值是Bird
有人可以帮忙吗?
编辑:以下代码有效:
public Cursor getCursor(String strListWhere, String strTable, String strCols) {
String strColsToReturn = mySqliteHandler.getWhereColNamesFromJsonString(strListWhere);
List<String> arrWhere = new ArrayList<String>();
arrWhere = mySqliteHandler.getWhereArray(strListWhere);
String[] finalValue = new String[ arrWhere.size() ];
arrWhere.toArray( finalValue );
String strTableName = strTable;
String[] strColumnsToReturn = { strCols };
String strSelectWhere = strColsToReturn ;
Cursor csrResult = sqLiteDatabase.query(true, strTableName, strColumnsToReturn, strSelectWhere, finalValue, null, null, null, null);
return csrResult;
}
解决方案
的值strColumnsToReturn
应该是一个数组,其中包含您要返回的列的名称,例如:
new String[] {column1, column2, column3}
column1, column2, column3
字符串在哪里。
的值strSelectWhere
应该是字符串:
"animal_class = ? and province_name = ?"
的值strSelectArgs
应该是一个字符串数组,其中包含您传递给每个?
占位符的参数strSelectWhere
:
new String {"Bird", "KwaZulu-Natal"}
你可以在这里找到更多
推荐阅读
- php - 如何在基本身份验证中显示错误消息?
- reactjs - 获取错误“从 fetchData 返回的承诺被忽略”
- c++ - 如何在一个文件中注册 mutli LLVM Pass?
- spring-boot - Spring oauth2 AuthorizationServer 不重定向
- angular - 找不到“object”类型的不同支持对象“[object Object]”。NgFor 仅支持绑定到 Iterables,例如 Angular 8 中的数组
- java - 为单个 kafka 主题创建多个消费者
- spring-boot - Spring Boot & reactor-netty https 多个域
- java - TestNG 套件并行化 testNG xml + Gradle
- go - 可靠地捕获外部命令的输出
- python - 修复损坏的python opencv安装