1

SimpleJdbcDaoSupport を使用して、Spring プロジェクトから MySQL ルーチンにアクセスしようとしています。

AdminSimpleMessageManagerインターフェイスを実装するというクラスがありますAdminMessageManager

AdminSimpleMessageManagerAdminSimpleJdbcMessageDaoインターフェイスを実装するクラスのインスタンスがあります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
4

1 に答える 1

1

を使用していますが、結果queryForIntinsert_contact_message返されません。私はこれまで使用したことがありませんが、結果セットを期待しないものJdbcTemplateを使用したいと思うかもしれません。execute

もう1つのオプションは、プロシージャの使用から関数への変更です。

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
于 2013-01-25T19:43:34.593 に答える