gpt4 book ai didi

mysql - 模糊的 MySql 连接器/J 错误消息 - java.sql.SQLException : boo {exclamation mark}

转载 作者:可可西里 更新时间:2023-11-01 08:19:53 26 4
gpt4 key购买 nike

嘿,这个 MySql 错误消息是什么意思?

java.sql.SQLException: boo!

springframework.dao.TransientDataAccessResourceException: CallableStatementCallback; SQL [{call sp_MyStoredProc(?, ?, ?)}]; boo!

这肯定不是特别有意义。有没有人遇到过这个并且能够翻译成不那么懒惰的~开发人员~ish ...?

我正在通过 org.springframework.jdbc.object.StoredProcedure 访问

我正在使用 org.springframework.jdbc-3.1.3

@更新

违规行在 CallableStatetement.java (2269-2271) 中

if (!found) {
throw SQLError.createSQLException("boo!", "S1000", this.connection.getExceptionInterceptor());`
}

附加 mysql-connector-java-5.1.18.jar 的源代码并跟踪代码显示正确的消息应该是“声明参数和实际参数不匹配”或类似的内容。

确实正确地声明了我的输出参数

declareParameter(new SqlOutParameter("output", Types.INTEGER));

而不是

declareParameter(new SqlParameter("output", Types.INTEGER));

解决了我的问题。但是更有意义的错误消息会节省宝贵的时间。我将向 MySql Connector/J 开发团队提出这个建议。

最佳答案

如问题更新中所述,这通常是由于错误地使用 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,因为我不希望有结果集,并且也会遇到问题(该示例取 self 正在修复的其他人的代码,乐趣 -_-)

关于mysql - 模糊的 MySql 连接器/J 错误消息 - java.sql.SQLException : boo {exclamation mark},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16813517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com