2009-07-30 41 views
5

Spring Frameworkには、2つの同様のクラスがあります。JdbcTemplateは古いJava 1.4クラスであり、SimpleJdbcTemplateはより新しいメソッドで、より良いメソッドです。SimpleJdbcTemplateでsetQueryTimeoutを設定するにはどうすればよいですか?

JdbcTemplateにはメソッドsetQueryTimeoutがあります。このメソッドは基本的に、基本となるStatementオブジェクトの同じ名前を持つメソッドにアクセスできます。

SimpleJdbcTemplateと同様の操作を行う方法はありますか?

ソリューション:skaffmanの答えに基づいて、私は今、私は私がやりたいことができ、SimpleJdbcTemplateJdbcTemplateから自分自身をオブジェクトを作成します。コード:

JdbcTemplate jdbcTemplate = this.getJdbcTemplate(); 
jdbcTemplate.setQueryTimeout(30); 
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate); 

少し口が開いていますが、仕事は終わりです。

更新:実際これは必要以上に複雑です。答えを見てください。

+0

私の編集された答えを見て、必要以上に複雑になる可能性があります。 – skaffman

+0

クエリタイムアウトの単位は何ですか? – akirekadu

+0

@akirekadu - 秒。 – itsadok

答えて

4

SimpleJdbcTemplat eは、JdbcTemplateの代わりではありません。varargsとgenericsを最大限に活用できる特定の操作では、java5に優しい補足物です。あなたはSimpleJdbcTemplateのソースを見れば

、あなたはそれ委譲しJdbcTemplateオブジェクトへの仕事のすべて、およびそのJdbcTemplateにタイムアウト(または他のオプション)を設定することで、あなたが暗黙のうちにそれらを設定していることがわかりますSimpleJdbcTemplateもあります。

SimpleJdbcTemplateSimpleJdbcDaoSupport.getSimpleJdbcTemplate()で取得している場合、JdbcTemplateはすでに正しく配線されています。

編集:例えば

public class MyDao extends SimpleJdbcDaoSupport { 
    public void doStuff() { 
     getJdbcTemplate().setQueryTimeout(x); 
     getSimpleJdbcTemplate().execute(...); 
    } 
} 

SimpleJdbcTemplateはgetJdbcTemplate(によって取得されたものと同じJdbcTemplateを含有します)。

SimpleJdbcDaoSupportを拡張しない場合は、はい、SimpleJdbcTemplateを手動で手動で構築する必要があります。

+0

しかし、JdbcTemplateはSimpleJdbcTemplate内で「トラップ」されたものにアクセスするにはどうすればよいですか?私が持っているのは、setTimeoutを持たないJdbcOperationsインターフェースにアクセスすることだけです。いくつかのコードを表示するためのケア? – itsadok

+0

あなたは、あなたの質問でSimpleJdbcTemplateについて質問しているとは言及していませんでした。あなたが実際に望むものを明確にするためにあなたの質問を修正してください。 – skaffman

+0

いいえ、私のコメントは不明でした。私は、SimpleJdbcTemplateオブジェクトを持つことは、私が持っているのは 'getJdbcOperations()'メソッドだということです。 'getUnderlyingJdbcTemplate()'メソッドはありません。 – itsadok

関連する問題