update statement preparestatement preparedstatement prepared parametros insertar example desde datos consultas con java mysql jdbc prepared-statement

preparestatement - preparedstatement java select



PreparedStatement arroja un error de sintaxis (2)

Esta pregunta ya tiene una respuesta aquí:

Estoy preparando una consulta usando PreparedStatements y funciona bien cuando codigo la consulta con el parámetro de condición.

pero arroja un error, si el parámetro se pasa desde el método setString ().

com.mysql.jdbc.JDBC4PreparedStatement@2cf63e26: select * from linkedin_page_mess ages where company_id = ''2414183'' 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 ''?'' at line 1

En el registro de errores, arriba mi consulta se ve bien.

public JSONObject getLinkedInMessages(String compId) { linlogger.log(Level.INFO, "Called getLinkedInMessages method"); Connection conn = null; Statement stmt = null; ResultSet rs = null; JSONObject resObj = new JSONObject(); JSONArray tempArray = new JSONArray(); try { conn = InitOrGetConnection(); String query = "select * from linkedin_page_messages where company_id = ?"; PreparedStatement pst=conn.prepareStatement(query); pst.setString(1, compId); System.out.println("/n/n"+pst.toString()); rs= pst.executeQuery(query); // process resultset logics } catch(Exception e) { System.out.println(e); linlogger.log(Level.INFO, "Exception occured "+e.toString()); } }

¿Hay algo mal con los estados preparados?


Eliminar el parámetro de

rs= pst.executeQuery(query);

cambiar a

rs= pst.executeQuery();

Si pasa la consulta en pst.executeQuery(query); como parámetro, esta cadena de query pasada tiene prioridad sobre la cadena de query que pasó en conn.prepareStatement(query); y dado que en la query ( select * from linkedin_page_messages where company_id = ? ) usted dint pass parameter obtiene el error.


eliminar el parámetro en esta línea:

rs= pst.executeQuery(query);

Debe ser

rs= pst.executeQuery();

Porque la declaración se prepara en PreparedStatement pst=conn.prepareStatement(query);

execute(String sql) se hereda de Statement y ejecutará el satement (sql) sin prepararlo.