问题似乎与setInt和setString方法中的'generic'语法有关。 - 当然,也可能是其他问题,但让我告诉你我发现了什么。
下面是我在mySql中的表,我正在尝试使用java进行查询。
Id | CashFlowSensitive | Sp1
-----------------------------------
37 | 1 | Hello
1000 | 0 | Hello
1401 | 0 | number3
1500 | 0 | number4
1504 | 1 | Hello
如果我的代码像“给我所有行CashFlowSensitive = 1和Sp1 =”Hello“,那么我的代码就可以了。它给出了第一行和最后一行,因为它们完全符合过滤标准。
现在,假设我更改了表格中的最后一行,替换了Hello
的{{1}}条目。然后该表看起来像这样
number5
最后,我启动了我的查询,要求它为我提供'CashFlowSensitive'= 1的所有行。 我应该得到37和1504。 遗憾的是,这给出了一个空的resultSet。我的JTable是空的。 在这个失败的例子中,我做了:
Id | CashFlowSensitive | Sp1
-----------------------------------
37 | 1 | Hello
1000 | 0 | Hello
1401 | 0 | number3
1500 | 0 | number4
1504 | 1 | number5
我有一个声明为的searchString (int CFS,int ToBeMonitored,String Sp1,String Sp2,String Sp3和另外7个参数) 我将查询字符串定义为: select * from table CFS =?和ToBeMonitored =?和Sp1 =?和Sp2 =?和Sp3 =?等枚举十个参数。 现在,在此查询的任何给定运行中,我只激活最多4个参数,例如,我想过滤掉2个参数:CFS和Sp1,其余参数应该对过滤过程保持中立,我将其称为“中性”。 这样做我设置了准备好的陈述 ((PreparedStatement)selectStmt)。setInt(1,1); //对此进行过滤 ((PreparedStatement)selectStmt)。setInt(2,'%'+ ToBeMonitored +'%'); //接受任何价值 ((PreparedStatement)selectStmt).setString(3,“Hello”); //对此进行过滤 ((PreparedStatement)selectStmt).setString(4,“%”+ Sp2 +“%”); ((PreparedStatement)selectStmt).setString(5,“%”+ Sp3 +“%”); 正如你所看到的,我正在使用我的sql来支持参数1和3,同时忽略其他参数,在过滤过程中使它们变为中性。问题:尽管有效数据,仍未创建结果集。
你的回答有点像我提出的问题。我希望您尊重这样一个事实,即无论在每次单独运行时我想要过滤哪些参数,都要反复保留相同的查询字符串。例如,如果我只打开CashFlowSensitive标志,那么在运行查询时该特定参数应该是活动参数。其他参数应该以中性的方式表现为过滤过程。在其他时候,我可能会选择激活Sp1字段(CHAR字段),然后其他字段应处于休眠状态。在其他情况下,我可能会选择几个字段的组合,这些字段应该是活动的,未选择的字段应该是中性的。 让我减少你的任务范围。 1)告诉我如何使用绑定参数查询CHAR字段,其中字段在过滤过程中应该是中性的,换句话说,任何内容都应该被接受2)你能告诉我如何检查软件生成的查询字符串
答案 0 :(得分:1)
问题是传递else路径中第二个参数的值。您的最终查询将如下所示:
select * from helm.activitiesextended
where CashFlowSensitive = 1 and Sp1 = '%<value of Sp1>%'
这显然不会返回任何记录。如果只需要那个参数,您应该只查询第一个参数。类似的东西:
select * from helm.activitiesextended where CashFlowSensitive = 1