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!");
    }


   }
 }
4

2 に答える 2

2

あなたの 2 番目のステートメントは正しくありません。

する必要があります

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

ただし、PreparedStatement を使用することを強くお勧めし、この SQL インジェクションの注意事項を読んでください -> http://xkcd.com/327/

于 2012-09-04T14:59:47.177 に答える
0

余分な引用符があります。それらは両方varとあなたのSQLにあります。

あなたの実例は次のとおりです。

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

あなたの壊れた例は次のように評価されますが:

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

おそらく結果が得られないだけでなく、文字列リテラル「N」の後に引用符で囲まれていないヒンディー語文字がエンコーディングされ、新しい文字列にスペースがあるため、SQL構文に関するエラーメッセージが表示されるはずです。

また、文字列を連結して SQL を構築することも非常に悪い習慣です。例のようにハードコードされているのではなく、値がユーザー入力から来ている場合は、決してこれを行わないようにしてください。

于 2012-09-04T14:59:40.457 に答える