Mysql
 sql >> база данни >  >> RDS >> Mysql

Неясно съобщение за грешка MySql Connector/J – java.sql.SQLException:boo {удивителен знак}

Както е посочено в актуализацията на въпроса, това обикновено се причинява от неправилно използване на CallableStatement. Например:

Съхранената процедура използва 2 параметъра, един вход и един изход:

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

но извикването към него използва само 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;
}

Когато правилният код наистина е:

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

Забележете, че също промених на cs.execute, тъй като не очаквам набор от резултати и ще имам проблеми и с това (примерът е взет от кода на някой друг, който коригирам, радостите -_-)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Опитвам се да се покажат данни от 2 таблици

  2. mysql команден ред връща време за изпълнение?

  3. Как мога да създам mysql db с Docker compose?

  4. Заявка за PHP/MySql И/ИЛИ за разширено търсене

  5. Mysql:Намерете записи от конкретен ден, като използвате колона с времеви печат