2016-04-13 48 views
1

次の呼び出しについて質問があります。ResultSetが正しく配置されていません

私は、ArrayList内でキーワードが何回発生したかをカウントするコードを書いています。しかし、偶数のループ。それは動作しません!

私はここに多くの解決されたものがあることを知っています。コードからエラーを解決できませんでした。ここ は私のコードです:

public static ResultSet getBins(Connection conn, String tableName){ 
    ResultSet distinctBin = null; 
    try { 
     Statement distinctBinsSt = conn.createStatement(
      ResultSet.TYPE_SCROLL_INSENSITIVE, 
      ResultSet.CONCUR_UPDATABLE); 
     distinctBin = distinctBinsSt.executeQuery("select bin, placedescr from " + tableName + " ORDER BY bin ASC limit 151"); 

    }catch(SQLException e){e.printStackTrace();} 
    return distinctBin; 
} 
public static Map <String,Integer> placeDescCounter(ArrayList<String> binDescription){ 
    Map<String, Integer> wordCount = new HashMap<String, Integer>(); 
     FlickrReader tagfileReader = new FlickrReader(); 
     for (String placeTag: binDescription) 
    { 
     Integer count = wordCount.get(placeTag); 
     wordCount.put(placeTag, (count==null) ? 1 : count+1); 
    } 
    return wordCount; 

} 
public static ResultSet getBinInfo(Connection conn, String tableName){ 
    ResultSet binInfo = null; 
    try { 
     Statement binInfoSt = conn.createStatement(
       ResultSet.TYPE_SCROLL_INSENSITIVE, 
       ResultSet.CONCUR_UPDATABLE); 
     binInfo = binInfoSt.executeQuery("select bin, count(bin) from " + tableName + " group by bin order by bin ASC;"); 
     binInfo.last(); 
     binInfo.beforeFirst(); 
    }catch(SQLException e){e.printStackTrace();} 
    return binInfo; 
} 
public static void main(String[] args) throws SQLException, ClassNotFoundException{ 
Connection conn = connectPG(); 
    String tableName= "tagcounterdebug"; 
    ResultSet bins = getBins(conn, tableName); 
    ResultSet binsInfo = getBinInfo(conn,tableName); 
    String placeDescriptions; 
    List<String> placeDescription; 
    ArrayList<String> binDescriptions = new ArrayList<String>(); 
    int bin =0; 
    bins.last();bins.beforeFirst(); 

    while(binsInfo.next()){ 
     int defaultBin = binsInfo.getInt("bin"); 
     int binSize = binsInfo.getInt("count"); 
     printDebug("loop conter " + (binSize - 1)); 
     bins.next(); 
     for (int i=0; i < binSize; i++){ 
      bin = bins.getInt("bin"); 
      placeDescriptions = bins.getString("placedescr").toLowerCase(); 
      placeDescriptions = placeDescriptions.substring(placeDescriptions.indexOf("[")+1 , placeDescriptions.indexOf("]")); 
      placeDescription = Arrays.asList(placeDescriptions.split("\\s*;\\s*")); 
      HashSet<String> hashSetDescriptions = new HashSet<String>();//create a HashSet for tokens to calculate less 
      hashSetDescriptions.addAll(placeDescription); 
      binDescriptions.addAll(hashSetDescriptions); 
      bins.next(); 
     } 
     printDebug("****\n defBin: " +defaultBin + " bin: " +bin + "\n****"); 
     Map<String, Integer> tagCount = new HashMap<String, Integer>(); 
     tagCount = placeDescCounter(binDescriptions); 
     for (String name: tagCount.keySet()){ 
      String key =name.toString(); 
      String value = tagCount.get(name).toString(); 
      System.out.println(key + " " + value); 
     } 
    } 
} 
} 
+0

何が問題なのですか?エラーメッセージはありますか? – brso05

+0

ええ、私はおそらくNext()を呼び出す必要があると書かれています。しかし、私はやりました;変更して別の場所に置こうとしました。しかし、それは動作しません! – Raha1986

+0

これにはpostgresqlというタグを付けるべきではありません。 –

答えて

0

お返事ありがとうございます。

DBから取得できる行が制限されているため、このエラーが発生します。それはループを通って行くことができませんでした。

0

あなたはこれが役立つことを見つけることがあります。あなたが二回.next()を呼んでいるhttps://stackoverflow.com/help/mcve

あなたがいないしているので、内側の呼び出しは、その最後の要素を過ぎてあなたのResultSetを配置します戻り値をチェックします。

関連する問題