問題タブ [multiple-resultsets]
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.
php - MYSQL + PDO nextRowSet ループの回数が多すぎますか?
複数の結果セットを返す MYSQL (5.5.35) ストアド プロシージャに苦労しています。SQLは次のとおりです
それから私はこれを行ういくつかのPHPを持っています...
ブラウザで次のように表示されると予想されます
ただし、代わりに7つの結果セットを実行し、例外が発生します
ここで本当に単純なものが欠けていますか?
java - JDBC:再度使用する前に結果セットの内容をクリアする方法は?
新しいクエリを実行するために再度使用する前に、結果セットの内容をクリアしたい (ただし、基になるデータベースには何も起こらないはずです)。
別のクエリからデータを取得するために同じ結果セットを再度使用できるように、そのデータを削除する方法はありますか (ただし、基になるデータベースには何もしません。これは重要です)。
API ドキュメントをすばやく検索したところ、次のような方法で物を削除 deleteRow()
すると、実際にはデータベースからもデータが削除される という考えが浮かびました。resultSet をリセット/リフレッシュ/クリアしたいだけなので、別のクエリの結果を取得するために再度使用するときに、前のクエリではなく、そのクエリのデータのみを含める必要があります。
または、コンテンツを取得すると、そのコンテンツ自体が自動的に削除ResultSet.getInt()
されますか (などのメソッドを介してResultSet.getString()
)。
編集:- 同じメソッドで各クエリを実行するための新しい結果セットを作成できますか?
sql - 複数のレコードセットを返す Oracle
カーソルを使用せずにプロシージャから複数のレコードセットを返すにはどうすればよいですか。カーソル疲れたシステムを知っているので、クエリにカーソルを頻繁に使用しています。複数のデータを取得する方法はありますか?
php - php mysql結合結果セットの繰り返しデータ
私の質問に関連する他のほとんどすべての投稿を読みましたが、決定的な回答を見つけることができません。これが既に回答されている場合は申し訳ありません。
基本的に、製品テーブルと画像テーブルがあり、1 つの製品に多くの画像を含めることができます。複数のクエリを実行するよりも、単一のクエリですべてのデータを取得する方がパフォーマンスが向上することを理解しています。
私は現在、完全にうまく機能する左結合クエリを使用していますが、私には非効率的です。
私の結果セットには多くの繰り返しデータがあり (私が求めているのはわかっています)、'products' テーブルには 50 個の (ish) 列が含まれているためです。'images' テーブルには 3 列しかないため、結果セットは次のようになりますこれ:
I_ID は images テーブルの主キーであり、テーブル間の関係が存在する「products」テーブルの列です。
一部の製品には、「製品」情報を 10 回または 15 回複製する 10 個または 15 個の画像が含まれている場合がありますが、これは間違っているように思えます。必要のないときに、非常に多くの繰り返しデータを持つこと。
私が本当に求めているのは、これが最善のアプローチなのか、それともIDに基づいて製品を見つけるための2つのクエリ1と、クエリ1から製品に関連する画像を見つけるための別のクエリが必要かということです.
私は、1対多の関係が次のようなものを返すことを期待していました:
また、次のような多次元配列を取得するのが最善だと考えていました。
しかし、私は一生、このようにデータを取り戻す方法を考え出すことはできません-助けてください
hibernate - 複数の結果セットを返す Hibernate JPA、継承、およびストアド プロシージャ
Hibernate 4.3.5.Final (JPA 2.1) を使用して、ストアド プロシージャから複数の結果セットを使用しようとしていますが、動作させることができませんでした。SQL Server 2008 を使用しています。
ストアド プロシージャの結果セットにはいくつかの共通点を持つ異なる列がありますが、それらを 1 つの結果セットに結合するには十分ではありません。共通性は、継承階層を持つ Java で表現されます。ストアド プロシージャの結果セットに明示的なテーブルが実際には存在しないにもかかわらず、TABLE_PER_CLASS の InheritanceType 戦略を使用してきました。それでも、Hibernate が 1 つの結果セットに対してクラス X1 のオブジェクトをハイドレートし、もう 1 つの結果セットに対して X2 のオブジェクトをハイドレートするために何かをする必要があります。
私の簡略化された Java 階層は次のとおりです。
と
と
@NamedStoredProcedureQuery を使用して、
StoredProcedureQuery を作成して実行します。
Hibernate は WrongClassException 例外をスローします。
例外: org.hibernate.WrongClassException: オブジェクト [id=512565] は指定されたサブクラス [com.xyz.search.jpa.X2] ではありませんでした: ロードされたオブジェクトは間違ったクラス クラス com.xyz.search.jpa.X1 でした
hibernate から生成された DEBUG ステートメントを見ると、@DiscriminatorValue() アノテーションが適切に処理されていないようです。X1 に @DiscriminatorValue(value="1") を指定したのに、Hibernate が頑固に X1 に対して 2 で SQL を生成している (2 as clazz_ from X1) これが問題の原因かもしれませんし、そうではないかもしれません。まだ。
複数の結果セットを返すストアド プロシージャで Hibernate/JPA を使用する方法はありますか?
私は何を間違っていますか?
前もって感謝します!
(誰かが私のテストコードから追加情報を必要とする場合は、plmk. :)
補遺(編集):
zxcf のアドバイスに従って、@NamedStoredProcedureQuery を次のように変更しました。
次のように SqlResultSetMapping を追加しました。
この変更により、非常に奇妙な動作が発生しています。List x = spq.getResultList() を使用して各結果セットを順番に処理すると、x が実際には Object[] であり、結果セットの各行が各クラスにマップされていることがわかります。つまり、結果セット 1 の行 1 には、 X1、X2、X3、および X7 にマッピングします。これは私が期待したものとはまったく異なります.resultSetは1つずつマップされると思っていました.つまり、最初のresultSetはX1にマップされ、2番目はX2にマップされます.しかし、それは起こっていることではありません.
2014 年 7 月 10 日更新 --
XBase.java では、
X1.java では、
X2.java では、
最初の結果セット ('1' as dc
すべての行を含む) は正しく処理されますが、すべての行を含む 2 番目の結果セットを処理しようとすると'2' as dc
、ClassCastException が発生します。
java.lang.ClassCastException: com.xyz.search.jpa.X1 は com.xyz.search.jpa.X2 にキャストできません
2 番目の getResultList() から返されたオブジェクトを X2 にケース化しようとしていますが、どうやら休止状態の JPA は、dc='2' を持つ行に対しても X1 をハイドレートしているようです。
ストアド プロシージャの結果セット 1:
ストアド プロシージャの結果セット 2:
上記の sp の結果は代表的なものです。明確にするために取り除いた他の列がたくさんあります。追加の 5 つの結果セットもあり、それぞれが異なる列のセットと dc の個別の値を持ちます: 1,2,3,4,5,6,7
いくつかの(おそらく最終的な)考え:
これを掘り下げれば調べるほど、Hibernate 4.3.5 Final は単一のストアド プロシージャからの複数の結果セットを適切に処理するように設計されていないことが明らかになります。一般に、特定のストアド プロシージャからの 2 つの結果セットに共通点があるという保証はなく、同じ主キーでさえない可能性があります。ストアド プロシージャから複数の結果セットを生成するという決定は、効率によって決まる場合があります。たとえば、複数の異なる結果セットを生成するために、SQL 側で同じ前処理手順 (一時テーブルの生成など) が必要になる場合があります。
ただし、SQL 行ごとに異なるクラスをインスタンス化するための JPA の唯一の機能は、ディスクリミネーター フィールドであり、ディスクリミネーターは少なくともいくつかの共通性を前提とする継承でのみ機能します。共通の識別子である主キーがない場合、Java クラス階層は機能しません。
また、共通の @Id フィールドを識別できる場合でも、Id フィールドの値が同じである異なる結果セットからの行は、行の残りの部分が完全に異なっていても、既存のオブジェクトにハイドレートされます。その ID を持つオブジェクトがキャッシュに既に存在する場合、Hibernate は明らかに識別子フィールドを無視します。
MappedSuperclass アプローチでさえ、共通の Id フィールドが必要です。また、結果セットは参照可能な名前付きテーブルではないため、サブクラスに Table(name="???") を指定する方法はありません。
hibernate - 複数の結果セットを返すストアド プロシージャでの JPA の使用
JPAを使用してSQL Serverのストアドプロシージャから異なる列を持つ複数の結果セットを処理することは可能ですか? これを行う方法(または最良の方法)は何ですか?
現在、Hibernate 4.3.5 Final と JPA 2.1、SqlServer 2008 を使用しています。
私の現在のアプローチのサガはここにあります: Hibernate JPA, inheritance and Stored Procedure returned multiple results sets
しかし、それは明らかに正しいアプローチではありません。誰かがこの仕事をする方法を知っているなら、私に知らせてください。ありがとう!!