2012-09-04 74 views
1

我寫了一個程序,它在mysql數據庫中搜索給定的印地文字,並檢索其存儲在數據庫中的英文對應名稱。當我直接給印地文字時,它工作正常在選擇的聲明,但我想給它使用一個變量,所以它可能是更一般的,但我沒有得到相同的結果..任何人都可以幫助我的解決方案它..在感冒從數據庫中檢索印地文字符

這是我寫的代碼

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給存儲在數據庫中的印地文值「हल्दी」當我只給出單詞हल्दी它被存儲爲?????我的數據庫看起來像Turmericहल्दी1,其中Turmeric是英文名,हल्दी在印地文,1它的編號.. – user1448447

+0

雅得到了你所有的結果是正確的在報價中有一個問題..謝謝你所有的朋友幫幫我 – user1448447

2

你的第二個陳述是不正確的。

應該

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

但我強烈建議使用PreparedStatement和讀取SQL注入的這個前車之鑑 - >http://xkcd.com/327/