2012-06-06 40 views
0

我有这个查询,我在Java中运行。在哪里条件选择sql中的所有数据?

select book from com where genre=?; 

我动态设置参数genre。有没有办法有时设置参数,以便选择所有数据?

+2

'是可能吗?'当然,但你必须让我们知道你正在使用哪个数据库。 –

回答

6

惯用的伎俩是设置选择一切单独的参数:

SELECT book FROM com WHERE genre=? OR 1=? 

当您设置的第二个参数0,按流派过滤使用,但是当你将它设置为1,返回一切。

如果你愿意改用named JDBC parameters,你可以用一个参数重写,并使用null表示“选择一切”:

SELECT book FROM com WHERE genre=:genre_param OR :genre_param is null 
0

创建一个不同的查询:

select book from com; 

这将让所有行“书”列“COM”。

0

只需使用通配符。例如, SELECT book FROM com WHERE genre LIKE "%"+seachString+"%";

+0

除非在java实现中不允许这样做。如果允许的话,其他人都没有提到它。 –

+1

这当然是允许的,但它是[Bobby Tables](http://bobby-tables.com/)的配方。 – dasblinkenlight

+0

此外,在问题中没有迹象表明预期的是通配符搜索。如果'genre ='art''真的应该返回'genre ='fartbubbles''的行吗?这个查询将做到这一点。 –

1

你的意思是你希望能够使用相同的脚本并传入一个忽略你的“Where”参数吗?利用这一点,通过字符串“ALLDATA”中的第二个参数设置为包含所有结果,而忽略你的第一个参数:

select book from com where (genre=? OR "AllData"=?); 
0

可以使用CASE表达式(SQL SQERVER):

select book from com where genre=CASE 
      WHEN ? IS NOT NULL THEN ? 
      ELSE genre 
      END