2014-08-29 61 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