2013-08-04 69 views
-1

안녕하세요. 내 테이블의 값을 사용자의 ID 번호에서 캡처 한 변수와 비교하여 내 데이터베이스의 다른 테이블에서 값을 테이블에 삽입하려고합니다. SQL 문의 끝에서() [Microsoft] [ODBC Microsoft Access 드라이버] 누락 세미콜론SQL 문의 끝에 세미콜론 (;)이 누락되었습니다.

은 java.sql.SQLException :

나는 다음과 같은 오류를 얻고있다. 여기

내가 위의 시도에 사용되는 코드입니다 : 잠시 옆으로 SQL 인젝션 공격에 대한 표준 경고를 떠나

Statement stmt1 = con.createStatement(); 

    String mySqlStatement1 = "INSERT INTO Entrant_Group VALUES (Group_Description) WHERE Group_MinAge <= " + details.getAge() + "AND Group_MaxAge >= " + details.getAge() + "AND Group_Gender = 'details.getGender()'"; 
    stmt1.executeUpdate(mySqlStatement1); 
+4

SQL 문의 끝 부분에 세미콜론을 넣지 않는 이유는 무엇입니까? – tbodt

+0

끝 부분에 세미콜론을 추가하십시오. – MinecraftShamrock

+3

@donthedestroyer : WHERE 절이있는 INSERT 문을 들어 본 적이 없습니다. 정확히 당신이 성취하고자하는 것은 무엇입니까? – Codo

답변

3

을, 명세서의 문제는 '잘못하고 돈 당신의 따옴표를 넣어 것입니다 t은 AND의 전에 공백이 :

:

String mySqlStatement1 = "INSERT INTO Entrant_Group VALUES (Group_Description) WHERE Group_MinAge <= " 
+ details.getAge() 
+ " AND Group_MaxAge >= " // Add space 
+ details.getAge() 
+ " AND Group_Gender = '" // Add space 
+ details.getGender()  // This part was enclosed in double-quotes 
+ "';";     // Add semicolon at the end 

당신이 당신의 쿼리를 매개 변수화하고, 준비된 명령문의 매개 변수에 값을 바인딩해야 주입 공격을 방지하기 위해

String mySqlStatement1 = "INSERT INTO Entrant_Group VALUES (Group_Description) WHERE Group_MinAge <= ? AND Group_MaxAge >= ? AND Group_Gender = ?;"; 
+1

그것은 올바른 방향으로 가고 있습니다. 하지만 AND 앞에 공백이 있어야합니다. – Codo