2012-09-28 40 views
2

搜索我想查询从特定列一些关键字和打印所有与关键词对应的列值,现在的问题是,如果我使用查询MySQL数据库的关键字中包含运营商

SELECT * FROM的候补技能,如%在技​​能C%,和不同的行是:

的Java,C,C++,HTML,CSS,净豆,我的Eclipse

的Java,Asp.Net,Eclipse的

C,PHP,CSS,休眠

现在,它是所有的行作为C是每一行中的子字符串,我试图使用C%,而不是%C%,但只有第三行显示,因为它以C开头,但我需要显示所有行有“C”作为另一个词,我如何搜索整个世界,建议一段代码。

import java.util.*; 
import java.sql.*; 
import java.io.*; 

public class TokensOfString 
{ 
    public static void main(String[] args) 
    { 
     String str; 
     String query = ""; 
     try 
     { 
      int i =0, cntToken =0; 
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
      System.out.println("Enter the keywords to be searched"); 
      str = br.readLine(); 
      StringTokenizer words = new StringTokenizer(str, ","); 
      cntToken = words.countTokens(); 
      //System.out.println("No. of Tokens = "+cntToken); 

      String token[]= new String[cntToken]; 

      while(words.hasMoreElements()) 
      { 
       token[i] = words.nextToken().trim(); 
       //System.out.println(token[i]); 
       i++; 
      } 
       //System.out.println(++i+" : "+words.nextElement().toString().trim());  

      query = "SELECT * from can_skills where skills like '"+ token[0] +"%'"; 
      // System.out.println("Query at 34 : "+query); 
      if(cntToken == 1) 
      { 
       query =""; 
       query = "SELECT * from can_skills where skills like '"+ str +"%'"; 
      } 
      if(cntToken > 1) 
      { 
       for(int j=1; j < cntToken; j++) 
       query = query + " or skills like '"+ token[j] +"%'"; 
      } 
      System.out.println("Query at 43 : "+query); 

      Connection con = null; 
      Class.forName("com.mysql.jdbc.Driver"); 
      String hostName = "localhost"; 
      String port = "3306"; 
      String userName = "root"; 
      String password = "root"; 
      con = DriverManager.getConnection("jdbc:mysql://" + hostName + ":" + port + "/prem", userName, password); 
      Statement statement= con.createStatement(); 
      ResultSet rs = statement.executeQuery(query); 
      while(rs.next()) 
      { 
       System.out.println(rs.getString(4)); 
      } 

     } 
     catch(ClassNotFoundException e){ System.out.println(e); } 
     catch(Exception ex){ System.out.println(ex); } 
    } 
} 

回答

0

在代替like表达使用正则表达式:

select * 
from Candidate 
where skills regexp '^C,| C,| C$' 

|装置or^表示字符串的开始,而$表示结束。所以它会匹配字符串的开始,结束和中间的标记。请注意,第二个和第三个案例之前有空格。

在java中,如果我没有说错:

"SELECT * from can_skills where skills regexp '^" + token[0] + ",| " + token[0] + ",| " + token[0] + "$'"; 
+0

谢谢,它工作 – P3M