"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué mi código JDBC arroja una excepción MySQLSyntaxErrorException a pesar de usar una declaración INSERT válida?

¿Por qué mi código JDBC arroja una excepción MySQLSyntaxErrorException a pesar de usar una declaración INSERT válida?

Publicado el 2024-11-07
Navegar:557

Why does my JDBC code throw a MySQLSyntaxErrorException despite using a valid INSERT statement?

Excepción de JDBC: MySQLSyntaxError con declaración SQL válida

En este artículo, profundizamos en un problema encontrado al usar JDBC para insertar datos en un Base de datos MySQL. Recibimos una excepción MySQLSyntaxError a pesar de ejecutar una instrucción INSERT válida en MySQL Workbench.

Para investigar la causa subyacente, analicemos el código:

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;
}

Examinando el seguimiento de la pila:

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

Este error indica que hay un error de sintaxis en la declaración SQL. Sin embargo, nuestra declaración INSERT parece ser correcta.

Tras una inspección más cercana, notamos que el métodoexecuteUpdate() toma un argumento de cadena SQLCommandInserim en lugar de PreparedStatement sInserim. Esto es un descuido en el código.

Solución:

Para resolver este problema, reemplace la siguiente línea:

sInserim.executeUpdate(sqlCommandInserim);

With:

sInserim.executeUpdate();

Al invocar enableUpdate() en PreparedStatement, JDBC reemplazará los marcadores de posición (?) con los valores establecidos usando el método setString(), evitando el error de sintaxis.

Consideraciones adicionales:

También se recomienda usar el bloque finalmente para cerrar toda la base de datos objetos (PreparedStatements, Connections, Statements y ResultSets) para evitar fugas de recursos en caso de excepciones.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3