2016-09-30 5 views
0

나는 다음과 같다 자바 코드에서 SQL 코드가 :오류 1064 : SQL 구문 오류

Connection con = null; 
     PreparedStatement pstmt = null; 
     ResultSet rs = null; 
     beforeExerTestDTO dto = new beforeExerTestDTO(); 

     StringBuffer sql = new StringBuffer(); 
     sql.append(" select * "); 
     sql.append(" from n_before_exer "); 
     sql.append(" where id=?"); 
     sql.append(" and reg_date = (select max(reg_date) from n_before_exer where id=?)"); 

     try { 
      con = pool.getLocalConnection(); 
      pstmt = con.prepareStatement(sql.toString()); 
      pstmt.setString(1, id); 
      pstmt.setString(2, id); 
      System.out.println("여기까진 살까??"); 
      rs = pstmt.executeQuery(); 
      /...... 
      ...... some code/
      }catch(SQLException e){ 
      System.out.println("read : " + e); 
      System.out.println("read : " + sql); 
     }catch(Exception e){ 
      System.out.println("read : " + e.getStackTrace().toString()); 
     }finally{ 
      DBClose.close(con, pstmt, rs); 
     } 
     return dto; 
} 

파일은 콘솔에서 다음과 같은 성명을 형성 실행됩니다 경우 :

select * from n_before_exer where id=? and reg_date = (select max(reg_date) from n_before_exer where id=?) 

와 내가 시도 무엇

java.sql.SQLEXCEPTION

가 발생합니다 :

  1. 나는 MySQL의 워크 벤치 쿼리 같은 실행 :

다음과 같은 오류 있어요 :

Error Code: 1064. 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 reg_date = (select max(reg_date) from n_before_exer where id=?)' at line 1

주제 쇼에 대한 연구의 비트 :

  1. 이 방법입니다 주입 공격으로 이어질 수있는 선호하는 방법이 아닙니다.
  2. 매개 변수에 대해 자리 표시자를 사용하는 것이 좋습니다 누군가가 나에게 맞는 선호하는 방법으로하시기 바랍니다

    감사

    를이 문장을 구성 도울 수 있다면

그것은 나를 위해 조금 복잡한 것 같습니다

+0

"?" 쿼리를 실행하기 전에 매개 변수를 사용합니까? –

+1

@ DanteFañaBadia : 오류 진술 주위에 여분의 코드가 추가되었습니다. 당신이 무엇을 말하고 있는지를 확인할 수 있는지 알 수 있습니까? –

+0

나는 매개 변수에 문제가 있다고 생각합니다. 매개 변수가 올바르게 설정되지 않았습니까? , 그냥 디버깅을 제안합니다. –

답변

0
당신은 준비된 문 사용해야

:

Connection con; // get a connection 
PreparedStatement ps = con.prepareStatement(sql); 
ps.setInt(1, someInt); 
ps.setInt(2, someOtherInt); 

ResultSet rs = ps.executeQuery(); 
while (rs.next()) { 
    // process each record 
} 
+0

SQL 오류 문 앞뒤에 추가 코드를 추가했습니다. 나는 네가 나에게 부탁 한대로하고 있다고 생각한다. 업데이트 된 질문을 볼 수 있습니까? 감사합니다 –

+0

실제로 연결을 어디에서 만드십니까? 나는 이것이 어디에서나 일어나는 것을 보지 못한다. –

0

구문에 구문이 올바른 것처럼 보입니다. 자바 파일 인코딩 문제가 있습니까?

+0

Kevin이 파일에서 UTF-8을 사용하지만 데이터도 한국어가 될 수 있습니다. 나는 그것이 작동하고있는 것 같아요, 오직이 로컬 설정에서만 그것의 행동 wierd. –

+0

SQL 문에 전각 문자가 있으면 그냥 생각합니다. – Kevin

0

pstmt.setString (1, id);

문제는 ID의 유형이 문자열이 아니라는 것입니다. 시도해 보려면 다음을 사용하십시오.