2016-08-16 8 views
0

こんにちは、私は残りの応答を返す間に、DB内のすべての値を取得していません。以下は RESTがDB内のすべての値を返さない

以下は私のサービスの下

public class BookService { 

BooksDAO booksDao = new BooksDAO(); 

//private Map<Integer, Book> books = Database.getBooks(); 

/*public BookService() { 
    books.put(1, new Book(1, "The Adventures of Tom Sawyer", "$28", "Mark Twain")); 
    books.put(2, new Book(2, "The Adventures of Sherlock Holmes", "$17", "Arthur Conan Doyle")); 
}*/ 

public List<Book> getAllBooks() throws SQLException, ClassNotFoundException { 

    return new ArrayList<Book>(booksDao.getAllBooks()); 

} 

@GET 
@Produces({MediaType.APPLICATION_JSON + ";charset=UTF-8",MediaType.APPLICATION_XML + ";charset=utf-8"}) 
public Response getBooks(@QueryParam("format") String format) throws SQLException, ClassNotFoundException { 

    return Response.status(Status.OK).entity((new GenericEntity<List<Book>>(bookService.getAllBooks()) { 
    })).header(HttpHeaders.CONTENT_TYPE, "XML".equalsIgnoreCase(format) 
      ? MediaType.APPLICATION_XML + ";charset=UTF-8" : MediaType.APPLICATION_JSON + ";charset=UTF-8").build(); 

} 

私は以下のREST応答

[ 
    { 
    "author": "Arthur Conan Doyle", 
    "id": 2, 
    "links": [], 
    "name": "The Adventures of Sherlock Holmes", 
    "price": "$17" 
    } 
] 
に取得しています私のリソースがされている私のDAO

public class BooksDAO { 

public List<Book> getAllBooks() throws SQLException, ClassNotFoundException { 

    List<Book> arrBook = null; 
    Book e = null; 
    Class.forName("com.mysql.jdbc.Driver"); 
    JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet(); 
    rowSet.setUrl("jdbc:mysql://localhost:3306/books"); 
    rowSet.setUsername("xxxx"); 
    rowSet.setPassword("xxxx"); 
    rowSet.setCommand("select * from books.library"); 
    rowSet.execute(); 

    while (rowSet.next()) { 

     e = new Book(rowSet.getInt(1), rowSet.getString(2), rowSet.getString(3), rowSet.getString(4)); 
     arrBook = new ArrayList<Book>(); 
     arrBook.add(e); 

    } 

    return arrBook; 

} 

です

リスト全体ではなく最後のものが返されます...

ここで私は間違いをしましたか?

arrBook = new ArrayList<Book>();     

while (rowSet.next()) { 
     e = new Book(rowSet.getInt(1), rowSet.getString(2), rowSet.getString(3), rowSet.getString(4)); 
     arrBook.add(e); 
    } 

あなたはすべての本のためにあなたのarrBookを初期化されています

答えて

0

あなたBookDao#getAllBooksメソッドの実装内で、あなたは、あなたのResultSetを横切る同じループ内の各要素のために検索結果を保持ArrayListを再構成している。

while (rowSet.next()) { 
    e = new Book(rowSet.getInt(1), rowSet.getString(2), rowSet.getString(3),rowSet.getString(4)); 
    arrBook = new ArrayList<Book>(); 
    arrBook.add(e); 
} 

リストResultSet要素をループする前に一度初期化されるべきである。

arrBook = new ArrayList<Book>(); 
while (rowSet.next()) { 
    e = new Book(rowSet.getInt(1), rowSet.getString(2), rowSet.getString(3),rowSet.getString(4)); 
    arrBook.add(e); 
} 
-1

は、次のようにコードを変更してください、ありがとうございました。これにより、新しいarraylistが作成され、すでに追加されたデータは破棄されます。 whileループの外でarrBook arraylistを初期化してみてください。

関連する問題