2017-08-23 15 views
0

Java ResultSetオブジェクトから取得したデータにアクセスしようとしています。Java ResultSetからデータにアクセスできません

Context ctx = new InitialContext(); 
DataSource datasource = ctx.lookup("database") 

PreparedStatement query = datasource.getConnection().prepareStatement("select * \n" + 
        "from appDb.market a \n" + 
        "where not exists \n" + 
        "(select * from mainDb.market b where a.id = b.id);"); 

    ResultSet rs = query.executeQuery(); 

      if (rs.next()){ 
       //The code will not reach this condition 
       System.out.println("Data found!"); 
      } 

はしかし、何らかの理由で、rs.next()私は、結果セットのrowDataオブジェクトにアクセスすることができます。..現在、ResultSetのrowData行を持っているにもかかわらず、trueに

を評価されていませんデバッグツールを使用すると、行のサイズが1であることがわかりますが、上記の行にはアクセスできません。私は何かばかなことをしなければならないと思うが、それほど確かではない。

documentation読み取り何
+0

データベースに対して同じクエリを直接実行し、結果が得られるかどうかを確認してください。空ではない内部データ構造を持っているということは、実際の行があることを示しているわけではありません。 – RealSkeptic

+0

@RealSkeptic私はこれをして、実際に結果を返します。 –

+0

@RealSkeptic rs.next()はtrueに評価されませんが、1行しか返さないことがありますか? –

答えて

0

新しい現在の行が有効な場合

はtrue。行がない場合はfalseを返します。

これ以上の行はないので、falseを返す必要があります。

また、条件付きユースケースの代わりにfirst()を使用することもできます。

+0

ドキュメントはまた、最初の行より前に開始すると言うので、 'next()'は本当に1つの行がある場合は 'true'を返さなければなりません。 – Marvin

関連する問題