Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Thông báo lỗi MySql Connector / J ít người biết đến - java.sql.SQLException:boo {exclamation mark}

Như đã nêu trong bản cập nhật cho câu hỏi, điều này thường xảy ra do sử dụng không đúng CallableStatement. Ví dụ:

Thủ tục lưu trữ sử dụng 2 tham số, một vào và một ra:

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

nhưng lệnh gọi nó chỉ sử dụng 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;
}

Khi mã chính xác thực sự là:

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

Lưu ý rằng tôi cũng đã thay đổi thành cs.execute vì tôi không mong đợi một tập hợp kết quả và cũng sẽ gặp vấn đề với điều này (ví dụ được lấy từ mã của người khác mà tôi đang sửa, niềm vui -_-)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql sao chép kiểu dữ liệu cột sang một bảng khác

  2. Chọn nhiều bảng so với THAM GIA (hiệu suất)

  3. ứng dụng web spring-boot mất khả năng kết nối với MySQL / RDS sau một thời gian

  4. MYSQL - Ghép hai bảng

  5. Sự khác biệt giữa kiểu dữ liệu int và int (2) trong sql của tôi