2012-09-04 2 views
1

Я написал программу, которая выполняет поиск данного слова хинди в базе данных mysql и получает его соответствующее имя на английском языке, которое хранится в базе данных. Оно отлично работает, когда я даю прямое слово хинди в выражении select, но я хотел бы дать его с помощью переменной, чтобы она могла быть более общей, но я не получаю результат для того же самого. Может ли кто-нибудь помочь мне с решением. Спасибо в этом случае.получить символ хинди из базы данных

Это код, который я написал

import java.sql.DriverManager; 
import java.sql.Connection; 
import java.sql.SQLException; 
import com.microsoft.sqlserver.jdbc.*; 
import java.sql.*; 

public class Example { 

public static void main(String[] argv) { 


    try { 

     Class.forName("com.mysql.jdbc.Driver"); 

     } 
    catch (ClassNotFoundException e) 
     { 

     System.out.println("Where is your MySQL JDBC Driver?"); 
     e.printStackTrace(); 
     return; 

     } 


    Connection connection = null; 

         SQLServerDataSource dataSource = new SQLServerDataSource(); 
           dataSource.setServerName("COMP-PC"); 
           dataSource.setPortNumber(1433); 
           dataSource.setDatabaseName("concept"); 
           dataSource.setUser("root"); 
          dataSource.setPassword("abc"); 

     try 
     { 
     connection = dataSource.getConnection(); 
     connection.setAutoCommit(false); 
     System.out.println("Connected to server !!!"); 
     Statement select = connection.createStatement(); 
     String var="N'हल्दी'"; 

    ResultSet result = select.executeQuery 



       ("SELECT Name, Id FROM MConcept where CName=N'हल्दी'"); 
    **// When given like the above statement it works fine 



       ("SELECT Name, Id FROM MConcept where CName='"+var+" ' "); 
    **//This does not give result 


     System.out.println("Got results:"); 
     while(result.next()) { // process results one row at a time 

     String Name = result.getString(1); 
     int ID = result.getInt(2); 

     System.out.println("name = " + Name); 
     System.out.println("id = " + ID); 
     } 
     select.close(); 
    connection.close(); 
     } 




    catch (SQLException e) 
    { 
    System.out.println("Connection Failed! Check output console"); 
    e.printStackTrace(); 
    return; 
    } 

    if (connection != null) 
    { 
    System.out.println("Successfully connected!"); 

    } 
    else 
    { 
System.out.println("Failed to make connection!"); 
    } 


    } 
} 

ответ

0

У вас есть дополнительные кавычки; они находятся как в var, так и в вашем SQL.

Ваш рабочий пример является:

("SELECT Name, Id FROM MConcept where CName=N'हल्दी'"); 

В то время как ваш сломанный пример вычисляет:

("SELECT Name, Id FROM MConcept where CName='N'हल्दी' ' "); 

Какой-видимому, не только не дает результата, но должно привести к появлению сообщения об ошибке о вашей SQL, так как у вас есть строковый литерал 'N', за которым следуют некорректные символы хинди в некоторой кодировке и пробел в новой строке.

Это также очень плохая привычка строить SQL путем объединения строк; убедитесь, что вы никогда этого не делаете, когда значение поступает с пользовательского ввода, а не с жесткого кодирования, как в вашем примере.

+0

Я был в состоянии хранить хинди значение в базе данных, когда дается как N «हल्दी» когда я дал только слово हल्दी, оно было сохранено как ????? моя база данных выглядит как куркума हल्दी 1, где куркума - это имя на английском языке, हल्दी на хинди и 1 ее идентификатор. – user1448447

+0

Я получил результат, который вы все были в порядке, была проблема в цитатах. Спасибо, что так много друзей за все ваши Помогите – user1448447

2

Ваше второе утверждение неверно.

Должно быть

"SELECT Name, Id FROM MConcept where CName=" + var 

Но я настоятельно рекомендую использовать PreparedStatement и прочитать эту поучительную историю инъекции SQL ->http://xkcd.com/327/

Смежные вопросы