sql >> Databasteknik >  >> RDS >> Mysql

Obscure MySql Connector/J-felmeddelande - java.sql.SQLException:boo {utropstecken}

Som anges i uppdateringen av frågan orsakas detta vanligtvis av felaktig användning av en CallableStatement. Till exempel:

Lagrad procedur använder 2 parametrar, en in och en ut:

CREATE DEFINER=`example`@`localhost` PROCEDURE `sp_getSensorLocation`(IN in_id VARCHAR(128), OUT loc VARCHAR(128))
BEGIN
SELECT LOCATION INTO loc FROM table.SENSORS
WHERE ID = in_id;
END

men anropet till den använder bara 1:

private String getSensorLocation(String sensorID) {    
    String location = "";
    Connection c = dbr.getConnection();
    String prepStatement = "{ call sp_getSensorLocation(?) } ";
    try {
         callableStatement cs = c.prepareCall(prepStatement);
         cs.setString(1, sensorID);
         ResultSet rs = cs.executeQuery();
         if (rs.next()) {
            location = rs.getString(1);
            }
         } catch (SQLException ex) {
                LOG.error("Error:", ex);
         }        
    dbr.closeConnection(c, rs, cs);
    return location;
}

När rätt kod verkligen är:

private String getSensorLocation(String sensorID) {
    String location = "";
    Connection c = dbr.getConnection();
    String prepStatement = "{ call sp_getSensorLocation(?, ?) } ";
    try {
        CallableStatement cs = c.prepareCall(prepStatement);
        cs.setString(1, sensorID);
        cs.execute();
        location = cs.getString(2);            
    } catch (SQLException ex) {
        LOG.error("Error:", ex);
    }
    dbr.closeConnection(c, rs, cs);
    return location;
}

Observera att jag också ändrade till cs.execute eftersom jag inte förväntar mig en resultatuppsättning och skulle ha problem med detta också (exemplet är hämtat från någon annans kod jag fixar, glädjen -_-)




  1. Case Expression vs Case Statement

  2. Databas - Designa en evenemangstabell

  3. Det gick inte att ansluta till MySQL på localhost:3306 med användarrot

  4. Lagra bild till databas blob; hämta från db till Picturebox