从Spring项目连接到MySQL数据库

时间:2013-01-25 19:17:10

标签: mysql spring jdbc

我一直在尝试使用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>

但我觉得有一些重要的缺失。我收到了错误

  

SEVERE:Servlet [dispatcher]的Servlet.service()在路径[/ NewWebsite]的上下文中引发了异常[请求处理失败;嵌套异常是org.springframework.dao.TransientDataAccessResourceException:PreparedStatementCallback; SQL [call insert_contact_message(?,?)]; ResultSet来自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

1 个答案:

答案 0 :(得分: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