JDBC 예외: 유효한 SQL 문에 MySQLSyntaxError
이 기사에서는 JDBC를 사용하여 데이터를 MySQL 데이터베이스. MySQL Workbench에서 유효한 INSERT 문을 실행했음에도 불구하고 MySQLSyntaxError 예외가 발생했습니다.
근본 원인을 조사하기 위해 코드를 분석해 보겠습니다.
<code class="java">public static boolean aggiungiElem(String nome, GrafoGenerico g){ if(connessioneAperta()){ try{ String sqlCommandUser = "SELECT USER()"; String sqlCommandInserim = "INSERT INTO salvataggi VALUES ( ? , ? , DEFAULT , NULL );"; PreparedStatement sUser = conn.prepareStatement(sqlCommandUser); ... // Execute user query PreparedStatement sInserim = conn.prepareStatement(sqlCommandInserim); sInserim.setString(1, utente); sInserim.setString(2, nome); System.out.println(sInserim); sInserim.executeUpdate(sqlCommandInserim); ... // Close PreparedStatements and ResultSet } catch(SQLException e){ e.printStackTrace(); return false; } } else return false; }</code>
스택 추적 검사:
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 '? , ? , DEFAULT , NULL )' at line 1
이 오류는 SQL 문에 구문 오류가 있음을 나타냅니다. 그러나 INSERT 문은 올바른 것 같습니다.
자세히 조사한 결과,executeUpdate() 메서드가 preparedStatement sInserim 대신 문자열 인수 SQLCommandInserim을 사용하는 것을 알 수 있습니다. 이는 코드의 실수입니다.
해결책:
이 문제를 해결하려면 다음 줄을 바꾸십시오.
<code class="java">sInserim.executeUpdate(sqlCommandInserim);</code>
<code class="java">sInserim.executeUpdate();</code>
PreparedStatement에서 ExecuteUpdate()를 호출하면 JDBC는 자리 표시자(?)를 setString() 메서드를 사용하여 설정된 값으로 대체하여 구문 오류를 방지합니다.
추가 고려 사항:
예외 발생 시 리소스 누출을 방지하기 위해 finally 블록을 사용하여 모든 데이터베이스 개체(PreparedStatements, Connections, 명령문 및 ResultSets)를 닫는 것이 좋습니다.
위 내용은 유효한 INSERT 문을 사용했는데도 JDBC 코드에서 MySQLSyntaxErrorException이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!