【问题标题】:Connecting to a MySQL database from a Spring project从 Spring 项目连接到 MySQL 数据库
【发布时间】:2026-01-24 06:35:01
【问题描述】:

我一直在尝试使用 SimpleJdbcDaoSupport 从我的 Spring 项目中访问 MySQL 例程。

我有一个名为AdminSimpleMessageManager 的类,它实现了接口AdminMessageManager

AdminSimpleMessageManager 有一个类AdminSimpleJdbcMessageDao 的实例,它实现了接口AdminMessageDao

AdminSimpleJdbcMessageDao有如下方法:

public class AdminSimpleJdbcMessageDao extends SimpleJdbcDaoSupport implements AdminMessageDao {

public int addMessage(String from, String message) {
    return getJdbcTemplate().queryForInt("call insert_contact_message(?, ?)", from, message);
}

}

我在我的应用程序上下文中包含以下内容:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/OctagonDB"/>
</bean>

<bean id="adminMessageManager" class="Managers.AdminSimpleMessageManager">
    <property name="adminMessageDao" ref="adminMessageDao"/>
</bean>

<bean id="adminMessageDao" class="Managers.dao.AdminSimpleJdbcMessageDao">
    <property name="dataSource" ref="dataSource"/>
</bean>

但我觉得缺少一些重要的行。我收到错误

严重:servlet [dispatcher] 的 Servlet.service() 在路径 [/NewWebsite] 的上下文中抛出异常 [请求处理失败;嵌套异常是 org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [调用 insert_contact_message(?, ?)];结果集来自 UPDATE。没有数据。;嵌套异常是 java.sql.SQLException: ResultSet 来自 UPDATE。没有数据。] 有根本原因 java.sql.SQLException:ResultSet 来自 UPDATE。没有数据。

我想知道 SQL 例程是否需要返回一些确认信息?或者也许我用错误的信息访问数据库,有没有办法确定它是否连接?

编辑: insert_contact_message 看起来像这样:

CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_contact_message`(
   _author VARCHAR(45),
   _message MEDIUMTEXT
)
BEGIN
   INSERT INTO contact_messages (`author`, `message`, `date_sent`) VALUES (_author, _message, NOW());
END

【问题讨论】:

    标签: mysql spring jdbc


    【解决方案1】:

    您正在使用queryForInt,但insert_contact_message 不返回结果。我之前没有使用过JdbcTemplate,但看起来您可能想要使用不期望结果集的execute

    另一种选择是从使用过程更改为使用函数。

    CREATE DEFINER=`root`@`localhost` FUNCTION `insert_contact_message`(
       _author VARCHAR(45),
       _message MEDIUMTEXT
    )
    BEGIN
       INSERT INTO contact_messages (`author`, `message`, `date_sent`) VALUES (_author, _message, NOW());
       RETURN 1;
    END
    

    【讨论】:

    • 但是参数不匹配,我记得之前在插入时使用了queryForInt,但我不记得如何了。也许有一种方法可以使用 SQL 插入命令返回一个 int?
    • 可以把过程变成函数并返回值。
    • 谢谢大卫,我现在返回最后插入的 ID,它工作正常!
    最近更新 更多