복붙노트

[SQL] 어떻게 자바에서 선택 쿼리를 위해 준비된 문을 사용 하는가?

SQL

어떻게 자바에서 선택 쿼리를 위해 준비된 문을 사용 하는가?

나는 준비된 문을 사용하여 여러 번 시도했지만 그것은 SQL 예외를 반환합니다. 여기 내 코드는 다음과 같습니다

public ArrayList<String> name(String mobile, String password) {
    ArrayList<String> getdata = new ArrayList<String>();
    PreparedStatement stmt = null;
    try {
        String login = "select mobile, password from tbl_1 join tbl_2 on tbl_1.fk_id=2.Pk_ID where mobile=? and password=?";

        String data = "select * from tbl_2  where password='" + password + "'";

        PreparedStatement preparedStatement = conn.prepareStatement(login);

        preparedStatement.setString(1, mobile);
        preparedStatement.setString(1, password);

        ResultSet rs = preparedStatement.executeQuery(login);

        Statement stmts = (Statement) conn.createStatement();

        if (rs.next()) {
            System.out.println("Db inside RS");
            ResultSet data = stmts.executeQuery(data);

            while (data.next()) { /* looping through the resultset */

                getdata.add(data.getString("name"));
                getdata.add(data.getString("place"));
                getdata.add(data.getString("age"));
                getdata.add(data.getString("job"));
            }

        }

    } catch (Exception e) {
        System.out.println(e);
    }

    return getdata;
}

이 실행하는 동안, 나는 다음과 같은 SQL 예외를 가지고 :

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and password=?' at line 1.

어떤 제안이 일을 만들어? 코드의 조각이 이해된다.

해결법

  1. ==============================

    1.당신은 사용할 필요가 :

    당신은 사용할 필요가 :

    preparedStatement.executeQuery();
    

    대신에

    preparedStatement.executeQuery(login);
    

    당신이하는 executeQuery ()에 문자열을 전달하면 쿼리는 말 그대로 따라서 실행된다? 다음 오류를 생성하는 데이터베이스로 전송됩니다. 쿼리 문자열을 전달함으로써 당신은 실행하면 값을 전달하는 내용은 "캐시"준비된 명령문을하지 않습니다.

  2. ==============================

    2.두 매개 변수에 대해 당신은 preparedStatement.setString (1 ..)를 사용; 상기 제 1 파라미터는 두 번으로 설정한다. 하지만 당신은 두 번째 매개 변수의 값을 설정하지 않습니다.

    두 매개 변수에 대해 당신은 preparedStatement.setString (1 ..)를 사용; 상기 제 1 파라미터는 두 번으로 설정한다. 하지만 당신은 두 번째 매개 변수의 값을 설정하지 않습니다.

    변화 때문에

    preparedStatement.setString(1, mobile);
                preparedStatement.setString(1, password);
    

        preparedStatement.setString(1, mobile);
        preparedStatement.setString(2, password);
    
  3. from https://stackoverflow.com/questions/24692296/how-to-use-prepared-statement-for-select-query-in-java by cc-by-sa and MIT license