MYSQL データベースと通信する Java Web アプリケーションを構築しています。依頼が来たらやらなければならないことがいくつかあります。
まず、いくつかのデータを検証する必要があります。これには、いくつかのデータが渡され、それが正確であることを確認する静的メソッドがあります。この検証の一部では、ResultSet を返す別の静的メソッドを使用してデータベースをクエリする必要があります。
つまり、Web アプリは、queryData() を呼び出す Validate(String data) を呼び出します。
私がこれを行うと、うまくいきます。
ここで、データが呼び出された後、データベースにデータを挿入する別の静的関数を呼び出します。この挿入関数は、データを取得するためにまったく同じ queryData 関数を呼び出します (常にではありません)。
つまり、Web アプリは、queryData() を呼び出す insertData(data) を呼び出します。プログラムの流れは次のようになります
Webapp
|----> Validate()
|-------->queryData()
<-----------|
<---------|
|
|------>insertData()
|-------->queryData()
<-----------|
<---------|
queryData メソッドでローカルに定義されている PreparedStatement を使用してデータベースにクエリを実行しています
前述したように、検証メソッドは正常に機能しますが、挿入メソッドになるとアプリケーションがクラッシュします。
どちらの場合も SQL ステートメントが同一であることを再確認しました。また、結果セットのメモリ位置も出力しましたが、それらは異なる場所にあります。ただし、結果セットの isBeforeFirst() を出力すると、検証メソッドでは true ですが、挿入メソッドでは false です。
JDBC は ResultSet の複製を返しているようですが (別のメモリ位置に保存されています)、実際には最初の行の前に配置される新しい ResultSet を作成していません。
簡単な解決策は、最初にresultSetを単に前に戻すことですが、これでは問題は解決しません。resultSet が最初の前ではないことをまだ示しています。
なぜこれが起こっているのか誰にも分かりますか?