いつもお世話になっております。
質問ばかりで申し訳ないのですが、以下の現象に悩まされております。
・Oracleに対しJavaのDAOからクエリを発行するとResultSet内のレコードが増殖する。
起きている現象
以下のDAOプログラムを実行すると実データより遥かに多いResultSetが返却されます。
java
1 public static List<String> getAvailabilityAccessToken() throws SQLException { 2 3 String sql = "SELECT ACCESS_TOKEN FROM AAAA_ACCTKN_TBL WHERE MESSAGE_KIND = 'FT' AND REVOKE_POSTED_DATE IS NULL" 4 + " ORDER BY ACCESS_TOKEN_EXP_DT DESC"; 5 List<String> accessTokenList = new ArrayList<>(); 6 7 ResultSet rs = null; 8 9 try { 10 Class.forName("oracle.jdbc.driver.OracleDriver"); 11 conn = DriverManager.getConnection(path, id, pw); 12 ps = conn.prepareStatement(sql); 13 14 logger.info("AaaaDAOImpl.getAccessToken SQL Execute"); 15 rs = ps.executeQuery(); 16 17 while (rs.next()) { 18 accessTokenList.add(rs.getString("ACCESS_TOKEN")); 19 } 20 } catch (Throwable t) { 21 logger.info("AaaaDAOImpl.getAccessToken SQL ERROR"); 22 return null; 23 } finally { 24 if (rs != null) { 25 rs.close(); 26 } 27 if (ps != null) { 28 ps.close(); 29 } 30 if (conn != null) { 31 conn.close(); 32 } 33 } 34 35 return accessTokenList; 36 37 }
テーブルの中身は以下の通りです。
tableData
1\: ACCESS_TOKEN 2 1:ACCESS-TOKEN000000000000000000000003 3 2:69ubXK04kKnSCAuwPjs5zKNKLtbluvKuzYNb 4 3:nvMEZbTSwRwiutDDfzavSHT5F7dipH1nIQ9o 5 4:pBg5dN5SU1kfT0OnmS826OEoJ08Zh4dWkOKb 6 5:zjh3K7Zsp2ML4pPJ7tJcnsxmPF4W7Q2k9VXU 7 6:4VmPc0WWOunzhyN44d7kmcC6o4egS9QI1E0M 8 7:ZDKw7XcttWgW2D2uoyJoYnySmGamoKxbMFQr 9 8:e5KhNU2EBfuKu4YdpsXcyy33Bbnly4Cyg2se 10 9:ACCESS-TOKEN000000000000000000000003 1110:ACCESS-TOKEN000000000000000000000004 1211:ACCESS-TOKEN000000000000000000000008 1312:ACCESS-TOKEN000000000000000000000009 1413:ACCESS-TOKEN000000000000000000000005 1514:ACCESS-TOKEN000000000000000000000002 1615:ACCESS-TOKEN000000000000000000000001
確認した事
・OracleDeveloperから生SQLを発行し、Responseの件数を確認しました。
本来取得したいレコード以外のデータは入り込んでいませんでした。
試した事
最初、リザルトセットの変数はクラスフィールドに宣言していました。
static宣言がまずいのではと思い、メソッド内のローカル変数として定義しなおしましたが、現象は変わりませんでした。
実際にプログラムで返却されるリストは300件を超えています。
回答3件
あなたの回答
tips
プレビュー