0

午後はみんな、

私はJavaとプログラミング全般に不慣れなので、これまでのところ、他のスニペットから少し石畳になっています。

私が持っているクラスの前提は、(最終的には SOAP サービスを介して) ユーザーからの入力を受け取り、SQL DB を検索して関連する行を返すことです。検索は一意の ID に対して行われるため、1 行のみが返されます。

以下のコードは私が望むように機能しますが、検索する文字列入力を受け入れるようにコード化する方法がわかりません。

package my.pack;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
//import java.util.List;

    public class ShowRow {

        public ArrayList<String> ShowResults(){

            Connection connection = null;
            String url = "jdbc:mysql://localhost:3306/";
            String dbName = "******";
            String driverName = "com.mysql.jdbc.Driver";
            String userName = "******";
            String password = "******";
            ArrayList<String> rowArray = new ArrayList<String>();

            try{
                  Class.forName(driverName).newInstance();
                  connection = DriverManager.getConnection(url+dbName, userName, password);

                  try{
                    Statement stmt = connection.createStatement();
                    String selectquery = "SELECT * FROM `thisTable` WHERE `uniqueID` = 12345";
                    ResultSet rs = stmt.executeQuery(selectquery);


                    while(rs.next()){
                      rowArray.add(rs.getString(1));
                      rowArray.add(rs.getString(2));
                      rowArray.add(rs.getString(3));

                      System.out.println(rowArray);
                    }
                  }
                  catch(SQLException s){
                    System.out.println(s);
                  }
                  connection.close();
                }
                catch (Exception e){
                  e.printStackTrace();
                }

            return rowArray;
        }
}

問題の行は次のとおりです。

String selectquery = "SELECT * FROM `thisTable` WHERE `uniqueID` = 12345";

12345 はユーザー入力から取得されます。

「ユーザー入力」を明確にするために、次のクラスでは「これ」の入力が必要になります (ただし、それ以外の場合は私の質問とはほとんど関係ありません!)。

public class Input {
     public String typeHere(String this){
return "You typed " + this;
  }
}

お時間をいただき、ありがとうございました。

4

1 に答える 1

1

ユーザー ID をパラメーターとしてShowResultsメソッドに渡し、 SQL インジェクション攻撃を防ぐPreparedStatement代わりに使用する必要があります。Statement

public ArrayList<String> ShowResults(Integer userId) {
    ...
    ...
    ...
    PreparedStatement preStatement = connection.prepareStatement("SELECT * FROM thisTable WHERE uniqueID = ?");
    preStatement.setInt(1, userId);
    ResultSet rs = preStatement.executeQuery();
    ...
    ...
    ...
}
于 2013-09-05T14:21:48.857 に答える