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: サーブレット [dispatcher] の Servlet.service() がパス [/NewWebsite] のコンテキストで例外をスローしました [リクエストの処理に失敗しました。ネストされた例外は org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; です。SQL [insert_contact_message(?, ?) を呼び出す]; ResultSet は UPDATE からのものです。データなし。; ネストされた例外は java.sql.SQLException です: ResultSet は UPDATE からのものです。No Data.] の根本原因 java.sql.SQLException: ResultSet は UPDATE からのものです。データなし。
SQL ルーチンが何らかの確認を返す必要があるかどうか疑問に思っています。または、間違った情報で DB にアクセスしている可能性があります。接続されているかどうかを判断する方法はありますか?
編集: 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