特定の列からいくつかのキーワードを検索し、そのキーワードに対応するすべての列の値を出力したかったのですが、クエリを使用すると問題が発生します。
%C%などのスキルとスキルのさまざまな行がある候補から*を選択します。
Java、C、C ++、HTML、CSS、Net Beans、My Eclipse
Java、Asp.Net、Eclipse
C、PHP、CSS、Hibernate
Cはすべての行の部分文字列であるため、すべての行が表示されます。%C%ではなくC%を使用しようとしましたが、Cで始まる3行目のみが表示されますが、「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); }
}
}