2013-03-01 56 views
2

我需要搜索包含用户信息表的我的数据库。我知道通过搜索与下面的查询得到结果使用“包含”查询而不是“完全匹配”查询来搜索oracle数据库

String query; 
StringBuilder sb=new StringBuilder(1024); 
sb.append("select * from userinfo where uname=").append(key); 
query=sb.toString(); 

但我需要做的是。

  • 如果关键是abc
  • 然后,我需要搜索所有数据库中的数据,其具有值abc
  • 例如
  • 我的数据库中包含的数据abcabagjabcabcxyzhjjabcxyz
  • 然后,我需要检索值abc,gjabc,abcxyzhjjabcxyz
  • 因为以上所有值都包含abc的共同点。

我该如何做到这一点?

+1

究竟为什么你认为这是一个servlet的问题,而不是JPQL/SQL的问题?一个servlet只是一个HTTP请求/响应控制器,而不是一些数据库交互框架/语言。尝试使用带main()方法的普通vanilla Java类实现此目的时,基本上会遇到完全相同的问题。 – BalusC 2013-03-01 13:35:55

+0

@BususC当然是对的。但是,当我解释它时,他实际上可以与数据库进行通信。这个问题需要一些编辑。 – Magnilex 2013-03-01 13:40:07

+0

反正我删除了不相关的标签。请注意,您的原始代码有一个[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)[攻击](http://unixwiz.net/techtips/sql-injection.html)漏洞。 – BalusC 2013-03-01 13:43:02

回答

7

如果您使用的是纯SQL,则应使用与“%”一样的环绕。然后,您的查询将返回uname包含“abc”的所有行。您的查询需要如下所示:

select * from userinfo where uname like '%key%' 
+0

问题在于它不会使用索引,而不像自由文本索引。 – Ben 2013-03-01 13:44:46

+0

@Ben但是这对詹姆斯来说可能够好了吗? :)虽然很高兴看到您的解决方案,但我绝不是数据库专家。 – Magnilex 2013-03-01 13:53:11

+0

@Magnus Tengdahl由于我使用的是Oracle数据库,因此无法正常工作。它会产生错误'无效字符'告诉我如何在Oracle数据库中对其进行归档。 – james 2013-03-01 14:00:59

2

正确的实现将使用PreparedStatement。

PreparedStatement ps = conn.prepareStatement("select * from userinfo where uname like ?"); 
ps.setString(1, key); 
ResultSet rs = ps.executeQuery(); 

当然,这一切错过错误检查和管道代码:)

+0

它也缺少''''应该围绕'键'值。 – GriffeyDog 2013-03-01 15:34:37