2014-08-29 62 views
0

在我的java應用程序中,我想從我的數據庫中檢索所有與給定句子中的任何單詞映射的句子。以下兩種方法對我來說都不起作用。如何通過sql「Like」運算符找到合適的句子?

/*...1st approach...*/ 
    String sentence1 ="Java is very famous programming language"; 
    String selectSQL = "SELECT Data_Sentences FROM table1 Where Data_Sentences LIKE '%"+sentence1+"%'"; 
    PreparedStatement ps=conn.prepareStatement(selectSQL); 
    rs = pstmtFGram.executeQuery(); 

這不是輸出任何句子,並沒有給出任何sql錯誤。

/*...2nd approach...*/ 
    String selectSQL = "SELECT Data_Sentences FROM table1 Where Data_Sentences LIKE '%Java%'||%'is'%||%'very'%||%'famous'%||%'programming'%||%'language'%"; 

在上面的方法中,檢索句子,該句子只與句子的第一個('%Java%')字相映射。即使有一個句子的單詞,我怎樣才能得到所有的句子地圖?

回答

0

String selectSQL = "SELECT Data_Sentences FROM table1 Where Data_Sentences LIKE '%Java%' or Data_Sentences LIKE '%is'% .... 

更理想怎麼會使用CriteriaBuilder

+0

非常多。這工作正常。但是我有另一個問題,我是如何在「where」部分之後改變它的? Bcz我不知道「sentence1」中單詞的長度,這個大小會動態變化。我如何改進代碼? – Maduri 2014-08-29 06:05:13

+0

嘗試使用http://docs.oracle.com/javaee/6/api/javax/persistence/criteria/CriteriaBuilder.html – 2014-08-29 06:07:17

0

嘗試,

SELECT Data_Sentences 
FROM table1 
WHERE Data_Sentences LIKE '%Java%' or Data_Sentences LIKE '%is%'; 

在Oracle 10g的功能REGEXP_LIKE也有。對於More

+0

Thanx很多。這工作正常。但是我有另一個問題,我是如何在「where」部分之後改變它的? Bcz我不知道「sentence1」中的單詞數量。這個大小會動態地改變。我如何改進代碼? – Maduri 2014-08-29 06:06:28

0

我可以在for循環word..now運行陣列由space..and商店解釋你只是邏輯..

先拆你的句子,這樣創建查詢。

string qry= "SELECT Data_Sentences FROM table1 Where"; 
    For(i=0;i<arraylenth;i++) 
{ 
    qry+= " Data_sentences like '%" + array[i].tostring() + "%' OR"; 
} 

qry += " 1=1"; 

它只是一個C#邏輯..轉換成你的java代碼。

+0

我有一個問題。當我添加1 = 1的內容時,像上面那樣添加結尾,即檢索所有數據庫內容。我該如何解決它? – Maduri 2014-09-04 07:23:58