0

整个下午,

我是 Java 和一般编程的新手,所以到目前为止我所拥有的东西在某种程度上是从其他片段拼凑而成的。

我拥有的类的前提是它将接受用户的输入(最终通过 SOAP 服务),搜索 SQL DB 并返回相关行。它只会返回一行,因为搜索是在唯一 ID 上。

下面的代码可以按我的意愿工作,我只是不知道如何对其进行编码以接受要搜索的字符串输入。

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 将从用户输入中获取。

为了澄清“用户输入”,以下类需要输入“this”(但与我的问题无关!);

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

非常感谢您的时间和帮助!

4

1 回答 1

1

您应该将用户 ID 作为参数传递给该ShowResults方法,并使用PreparedStatement而不是Statement防止 SQL 注入攻击。

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 回答