2013-03-01 27 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