sql >> Database teknologi >  >> RDS >> Mysql

Obscure MySql Connector/J fejlmeddelelse - java.sql.SQLEundtagelse:boo {udråbstegn}

Som angivet i opdateringen af ​​spørgsmålet er dette almindeligvis forårsaget af forkert brug af en CallableStatement. For eksempel:

Lagret procedure bruger 2 parametre, en ind og en ud:

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 opkaldet til det bruger kun 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 den korrekte kode virkelig er:

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

Bemærk, at jeg også ændrede til cs.execute, da jeg ikke forventer et resultatsæt og også ville have problemer med dette (eksemplet er taget fra en andens kode, jeg retter, glæden -_-)




  1. MySQL installer og indlæs database på Inno Setup script

  2. Forebyggelse af SQL-injektion i Node.js

  3. Ved MySQL-import:FEJL på linje 32769:Ukendt kommando '\''

  4. Kan jeg få navn på alle tabeller i SQL Server-databasen i C#-applikationen?