2016-08-17 6 views
0

午前の研究の後、簡単なコードでなければならないものがあります。Java ResultSetがレコードをスキップする

私が望むのは、テストデータベースのraw_materialテーブルからすべてのレコードを取得することです。

Result

ので、私はMAN-500-121200000する最初の「結果」を期待するが、それは次のとおりです。ここで

public static void fetchIthos(ArrayList<String> ithosList, UserDto user) { 
     // TODO Auto-generated method stub 

    //get our stuff first - raw materials and doc names and paths 
    try { 

     Connection conn = user.getConnection(); 
     Statement st = conn.createStatement(); 
     ResultSet rs = st.executeQuery("SELECT * FROM raw_material where object_id > 0"); 

     do { 
     String result = rs.getString("raw_material_number").toString(); 
     System.out.println("next item: " + result); 
     //ithosList.add(rs.getString("raw_material_number")); 
     } while(rs.next()); 
    } 

    catch (Exception e) { 
     ithosList.equals(null); 
     System.out.println("DB error : " + e); 
    } 
} 

は、MySQLの結果は以下のとおりです。ここで

は私がやっているものですRAW-001485

私は最初のレコードをスキップしていますが、私がそれは次のものをスキップしますMAN-500-056100000

間違ったユーザー接続を使用していますか?それが私にはこのことに影響することがわかります。

私はuser.getConnection()と思っていましたが、これは通常のテスト用のデータベースでしかありません。

+0

'ithosList.equals(null);'は何もしません。このメソッド呼び出しは、 'ithosList'が' null'の場合はtrueを返し、そうでない場合はfalseを返します。 –

+0

私はまだその部分をコーディングしていません。私はarraylistに追加する前に正しい結果が欲しいです。 –

+0

'ResultSet rs = st.executeQuery(" SELECT * FROM raw_material where object_id> 0 ");を実行すると、結果が同じ順序で返されるという保証はありますか? – bradimus

答えて

0
public static void fetchIthos(ArrayList<String> ithosList, UserDto user) { 
    // TODO Auto-generated method stub 
    int i = 1; 
    //get our stuff first - raw materials and doc names and paths 
    try { 

     Connection conn = user.getConnection(); 
     Statement st = conn.createStatement(); 
     ResultSet rsCount = st.executeQuery("SELECT COUNT(*) from raw_material"); 
     rsCount.first(); 
     long r = (Long) rsCount.getObject(i); 

     for (i=1; i < r+1; i++) { 

      ResultSet rs = st.executeQuery("SELECT * FROM raw_material where object_id =" + i + ""); 

      //moves to the first record 
      rs.first(); 

      do { 
       String result = rs.getString("raw_material_number"); 
       System.out.println("next item: " + result); 
       ithosList.add(rs.getString("raw_material_number")); 
      } while(rs.next()); 
     } 
    } 

    catch (Exception e) { 
     ithosList.equals(null); 
     System.out.println("DB error : " + e); 
    } 

} 

ハックそれを行う方法が、それはそれは、少なくとも死別から上級開発者が戻るまで、今のために働くようになりました。私は3ヶ月のJava、火災による洗礼を受けたことに留意してください。笑。

4

あなたのコードが誤っているようですが、予想されるループは、むしろ次のとおりです。

while(rs.next()) { 
    String result = rs.getString("raw_material_number"); 
    System.out.println("next item: " + result); 
} 

は、次のように正しくConnectionStatementResultSetを閉じるためにtry-with-resourcesステートメントを使用して考えてみましょう:

try (Connection conn = user.getConnection(); 
    Statement st = conn.createStatement(); 
    ResultSet rs = st.executeQuery("SELECT * FROM raw_material where object_id > 0")) { 
    // My code here 
} 
+0

これは間違いなく正しいですが、最初の結果をスキップすることは奇妙に思えます。実際には、カーソルを進めないとエラーメッセージが出るのを覚えているようですが、実装に依存する可能性があります。 –

+0

'while(rs.next()){ 文字列結果= rs.getString( "raw_material_number"); System.out.println( "次の項目:" +結果); } ' まだ返信RAW-001485 –

+0

@PaulaAnneMcGrathあなたはMAN-500-121200000をまったく手に入れませんか? –

0

次のように試してみてください。

while(rs.next()){ 
    String result = rs.getString("raw_material_number"); 
    System.out.println("next item: " + result); 
} 
+0

なぜ '.toString()'が既に 'String'であるのですか? –

+1

コピー貼り付け問題..... .....更新 –

関連する問題