2011-10-04 25 views
28

を設定します。Javaは、結果をループ、私はこのようなクエリを持っているJavaでは

Sid  lid 
3   2 
4   4 
7   3 
9   1 

私は、JavaのResultSetでこれらの値を抽出するにはどうすればよい:テーブルrlink_idは、このデータを持っている

String querystring1= "SELECT rlink_id, COUNT(*)" 
        + "FROM dbo.Locate " 
        + "GROUP BY rlink_id "; 

?ここで

は、私がこれまで持っているものです。

String show[] = {rs4.getString(1)}; 
String actuate[] = {rs4.getString(2)}; 
asString = Arrays.toString(actuate); 

答えて

13

Result Setは、実際には複数行のデータが含まれており、現在の位置を指摘して、カーソルを使用しています。あなたのケースでは、rs4.getString(1)は、最初の行の最初の列のデータを取得するだけです。次の行に変更するためには、多くの有用な方法は、ResultSetではありますが、あなたが見てみる必要があります:)

+1

私はこのSid n lidをどこかのループを通して呼び出すと、値の最初の行しか与えません – user977830

+0

whileループのrs.next()は最初の結果をスキップしませんか? – Durin

+2

@Durin:[ResultSet.next()](http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#next%28%29)のjavadoc、最初の行が作成される前にカーソルが実際には点**の前にあります:) –

30
List<String> sids = new ArrayList<String>(); 
List<String> lids = new ArrayList<String>(); 

String query = "SELECT rlink_id, COUNT(*)" 
      + "FROM dbo.Locate " 
      + "GROUP BY rlink_id "; 

Statement stmt = yourconnection.createStatement(); 
try { 
    ResultSet rs4 = stmt.executeQuery(query); 

    while (rs4.next()) { 
     sids.add(rs4.getString(1)); 
     lids.add(rs4.getString(2)); 
    } 
} finally { 
    stmt.close(); 
} 

String show[] = sids.toArray(sids.size()); 
String actuate[] = lids.toArray(lids.size()); 
+0

それは "do-while"であってはなりませんか?初めに最初の行にアクセスするためのイテレータが正しい位置にありませんか? (なぜ、最初の行にアクセスするチュートリアルは、別の方法でしか動作しないのですか?) – GameDeveloper

+0

絶対に(クエリは行を返さない)ことはできません。どのようなチュートリアルについて話していますか? –

+0

私の問題を解決してくれてありがとう、ありがとう.U.U Google検索の最初の場所に間違ったチュートリアルがありました。 – GameDeveloper

-3

簡単な例

while (rs.next()) { 
    String sid = rs.getString(1); 
    String lid = rs.getString(2); 
    // Do whatever you want to do with these 2 values 
} 

next()

を呼び出す必要がありますあなたのコードに問題があります:

 String show[]= {rs4.getString(1)}; 
    String actuate[]={rs4.getString(2)}; 

これは、毎回新しい配列を作成します。あなたのループに時間をかけてください(あなたが仮定している通りに追加しないでください)。したがって、最終的に配列ごとに1つの要素しか持たないでしょう。

StringBuilder sids = new StringBuilder(); 
    StringBuilder lids = new StringBuilder(); 

    while (rs4.next()) { 
     sids.append(rs4.getString(1)).append(" "); 
     lids.append(rs4.getString(2)).append(" "); 
    } 

    String show[] = sids.toString().split(" "); 
    String actuate[] = lids.toString().split(" "); 

これらの配列は、必要なすべての要素を持っています:

はここでこれを解決するもう一つの方法です。

+1

これは私が今まで見たことのある配列を作るのに最も奇妙な方法です。また、文字列の1つにスペースが含まれている場合はどうなりますか? –

+0

downvoteの理由は何ですか? – Santosh

+0

OPは文字列ではなくintを格納しています。だから確かにスペースはありません。他の人が提案した方法とは別に配列を作成するという別の方法です。 – Santosh

関連する問題