【发布时间】:2018-10-22 01:23:06
【问题描述】:
我想创建一个动态 where 子句之类的东西,但遇到了困难。
框架: 我想使用 4 个 Togglebuttons,这显然会给我返回“Togglebutton.ischecked()”一个真或假布尔值。据此,我想选择我的数据库的正确课程。 Togglebuttons 的值是“Basic”、“Common”、“Uncommon”和“Rare”。 如果按下 Togglebuttons,它会调用 DB 方法,然后使用数据库的数据设置我的布局。
问题: 我在创建正确的查询时遇到问题,该查询会相应地更改 whereArguments 和 whereClause。根据我的理解 whereClause 需要一个 String 而 whereSelection 需要一个 StringArray。
我尝试了什么:
- 我尝试相应地创建一个 StringArray,这会产生固定索引的问题。因此,我在创建智能逻辑时遇到了问题,该逻辑会产生正确的 StringArray,
例如如果 ToggleButton (tb) tbBasic = true, tbUncommon = false, tbCommon = true, tbRare = true, 我需要类似 String[] whereArgs = new String[] {"Basic","Common","Rare"} 而我无法使用类似“添加”方法的方法相应地创建它。
- 因此,我尝试使用 Arraylist,它可以根据切换非常轻松地进行添加和删除。
例如如果我的 DBHelper 方法 getAllHeros 被调用,我可以每次创建一个新的 Arraylist,这会产生正确的 whereArgs。
ArrayList<String> whereArgsList = new ArrayList<>();
if(btnBasic){
whereArgsList.add("Basic");
}
if(btnCommon){
whereArgsList.add("Common");
}
if(btnUncommon){
whereArgsList.add("Uncommon");
}
if(btnRare){
whereArgsList.add("Rare");
}
Cursor c = db.query("TableHeros", null,whereClause, whereArgsList.toArray(new String[0]),null,null,null,null);
问题在于显然 whereClause 也必须相应更新。因此,在 Arraylist 比一个 Element 长的情况下, whereClause 也需要相同数量的元素。
我希望我的观点很清楚,我愿意尝试任何建议
【问题讨论】:
-
您当前对
db.query的调用似乎没有选择任何列,也不清楚基础查询应该是什么。您可以将您想要的原始 SQLite 查询添加到问题中吗? -
@TimBiegeleisen SQLiteDatabase 的查询方法的第二个参数指定列,null 等于 *(所有列)。底层 SQL/查询将是
SELECT * FROM TableHeros ........ -
@MikeT 谢谢,不知道。但是关于
whereClause? -
@TimBiegeleisen 是的,需要澄清 WHERE 子句需要什么切换是针对单个列还是单个列,以及是否应该使用 AND 或 OR,甚至可能是 IN 或 NOT IN .
-
@MikeT,我总是想要所有列,这就是我没有真正指定的原因。对不起 :)。所以使用 null 来获取所有列就好了
标签: android mysql sql sqlite togglebutton