問題タブ [jdbctemplate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - SpringJDBCTemplateQueryメソッドからの結果セットメタデータ
jdbctemplateクエリメソッドの1つから結果セットオブジェクトを取得する方法はありますか?
私は次のようなコードを持っています
finalQuery Stringに格納されているSQLステートメントを実行して、結果セットを取得したかったのです。クエリは6〜7個のテーブルでの複雑な結合であり、各テーブルから4〜5個の列を選択し、それらの列のメタデータを取得してデータ型とデータをダウンストリームシステムに変換したいと考えています。
単純なクエリで、1つのテーブルのみをフェッチしている場合は、RowMapper#mapRowを使用でき、そのmaprowメソッド内でResultsetExtractor.extractDataを呼び出して結果のリストを取得できます。しかし、この場合、クエリに複雑な結合があり、結果セットオブジェクトとその結果セットメタデータを取得しようとしています...
上記のコードは、結果ごとに同じ結果セットオブジェクトを返し、リストに保存したくないため、適切ではありません...
もう一度、クエリの結果ごとにmaprowが呼び出された場合、リストにRSオブジェクトへの参照がある場合でも、JDBCTemplateはrsと接続を閉じますか?
jdbcTemplate.queryForResultSet(sql)のような簡単なメソッドはありますか?
これで、独自のResultSet Extractorを実装して、データを処理してダウンストリームシステムに挿入しました。
このCustomResultSetProcessorはResultSetExtractorを実装し、extractDataメソッドで3つの異なるメソッドを呼び出しています。1つはrs.getMetaData()からのget ColumnTypesで、もう1つは実行によるターゲットメタデータのgetColumnTypesです。
3番目のメソッドでは、挿入ステートメント(準備済み)フォームのターゲット列タイプを作成し、最後にそれを使用して呼び出します
これが他の人に役立つことを願っています...
java - Spring JDBC を使用する DAO クラスの単体テスト
データベースから情報を取得するために使用されるいくつかの DAO オブジェクトがあり、それらの自動テストを作成したいと思っていますが、その方法を理解するのに苦労しています。
Spring を使用して(準備済みステートメントを介して) 実際のクエリを実行し、結果を (クラスJdbcTemplate
を介して) モデル オブジェクトにマップしています。RowMapper
単体テストを作成する場合、オブジェクトをどのようにモックするか、またはモックする必要があるかわかりません。たとえば、読み取りしかないため、jdbcTemplate をモックするのではなく、実際のデータベース接続を使用しますが、それが正しいかどうかはわかりません。
バッチの最も単純な DAO の (簡略化された) コードは次のとおりです。
任意のアイデアをいただければ幸いです。
ありがとう!
java - Springs SimpleJdbcInsertは、自動生成されたキーを期待どおりに生成しません
Springs SimpleJdbcInsertを使用してJDBC挿入を実行し、自動生成された2つのキーを返します。
私が使用するコマンドは次のとおりです。
ただし、keys
名前が付けられたキーは1つだけ含まれていますSCOPE_IDENTITY()
ログは、TRANSACTIONIDとROWIDの自動生成されたキーが入力されないことを除いて、状況が順調に進んでいることを示しているようです。関連するログを次に示します。
java - Spring jdbcTemplate を使用して MS Access で日付を更新する
MS Access と Spring Jbdc Template を使用しています。
jdbctemplate を使用してテーブルの日付を更新しようとすると、エラーが発生します
これはコードです:
前もって感謝します、サントッシュ
postgresql - Spring JDBC - 最後に挿入された ID
Spring JDBC を使用しています。Spring Framework を使用して最後に挿入された ID を取得する簡単な方法はありますか、それとも JDBC トリックを使用する必要がありますか?
以下のようなものを見つけましたが、次のようになります。org.postgresql.util.PSQLException: Returning autogenerated keys is not supported.
oracle - 主キー欠落挿入なしの Oracle バッチ挿入
ojdbc14.jar ドライバーと Spring の SimpleJdbcTemplate batchUpdate メソッドを使用して、主キーのない Oracle 9i テーブルに 100,000 を超えるレコードを挿入しようとしています。ここに私のコードスニペットがあります:
}
inputData List、dataArray、およびバッチ長のサイズはすべて同じ期待値です。batchUpdate は例外をスローせずに完了し、挿入された配列内のすべての項目が -2 (成功) を返すため、後続の for ループは何も出力しません。ただし、予期される 100,000 以上のレコードではなく、42,000 レコードのみが宛先テーブルに永続化されます。
入力コレクションをループし、アイテムごとに更新を実行して batchUpdate を置き換えると、100,000 件以上のレコードが保持されます。ただし、改善されたパフォーマンスを利用するために、batchUpdate を使用したいと考えています。
なぜ batchUpdate が機能しないのか、誰か考えはありますか? 主キーの欠落と関係があると思わざるを得ません。
以下は、inputData リストの作成に使用されるソース テーブルのデータです。
そして、batchUpdate 後に保持されるものは次のとおりです。
ソース テーブルの 24 行は、宛先テーブルにも 24 行あるはずですが、データが取り込まれるのは 11 行のみです。
java - Spring の NamedParameterJDBCTemplate は Hibernate のセッションに参加しますか?
短い質問の下の長い話: Spring の NamedParameterJDBCTemplate を Hibernate のセッションに参加させるにはどうすればよいですか? Spring と Hibernate を使用するアプリケーションがあり、データレイヤー全体は Hibernate を使用しています。しかし今、休止状態ロジック全体が配置されている親オブジェクトがあるユースケースがあります。親オブジェクトには多く (> 4000) の詳細があり、Spring の jdbctemplate を使用して (hibernate を使用する代わりに) すべて 1 つのトランザクションに挿入したいと考えています。親オブジェクトが保存され、親の ID (Oracle シーケンス) が設定され、オブジェクトを介して読み取り可能になります。永続的に保存するには、コミットするだけです。トランザクション境界は、詳細の 4000 以上の jdbctemplate 挿入も起動するメソッドに設定されます。詳細である詳細には、親の ID である親オブジェクトへの参照が必要です。4000 以上の挿入が実行されているときに利用できます。ただし、最初の詳細の挿入では、
integrity constraint (FK_008) violated - parent key not found
jdbctemplateはおそらく別のセッションを使用しているため、別のトランザクションを使用しているため、私はそれを理解していると思います。4000 回以上の挿入を行うメソッドに propegation:required トランザクション属性を設定しようとしましたが、コミットされていない新しい親 ID を読み取るにはトランザクションの結合で十分であると期待していましたが、明らかに十分ではありませんでした。どうにかして休止状態セッションを春の jdbctemplate に配線できることを望んでいますが、これまでのところそうできていません。SpringJDBC は引数として dataSource を受け取り、jtatransaction マネージャーは Hibernate SessionFactory を受け取ります。これまでのところ、東と西は東と西であり、両者が出会うことはないと感じています。Spring の jdbctemplate を Hibernate のセッションに参加させる他の方法はありますか? (親をコミットするコースを除く)
HibernateSessionFactoryは、引数の 1 つとして dataSource を持つ org.springframework.orm.hibernate3.LocalSessionFactoryBean です。
TransactionManagerは、引数として sessionFactory を取得する org.springframework.orm.hibernate3.HibernateTransactionManager です。
NamedParameterJDBCTemplateは、sqlInserter のセッターで作成されます。
うまくいけば、誰かがここで私を助けてくれます。
乾杯、ジェローン
java - Spring JDBCTemplateは、InvalidResultSetAccessException無効な列インデックスを提供します
Springを使用してOracleDBSimpleJDBCTemplate
にアクセスします。これが私のコードです。
行マッパーは次のとおりです。
SQLが動作することがテストされています。
例外スタックトレース:
ありがとう。
java - spring jdbctemplate を使用してデータベースから pojo を設定する
列に一致するデータメンバーの名前をスプリングが自動検出できるようにすることで、マッパーを作成せずにオブジェクト (pojo) を設定することは可能ですか? 次のように使用する SimpleJdbcInsert に似たものがあると期待していました。
ありがとう!