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.