2010-05-20 5 views
1

가능한 중복 : 내가 사용할 수있는 좋은 범용 표 기반 구조가 있다면
Table like java data structure일반 목적의 테이블 구조 (같은 ResultSet의)

는 아는 사람 있나요 데이터 조작? ResultSet은 인터페이스이므로 데이터베이스없이 비슷한 기능을 원한다면 완전히 구현해야 할 필요가 없습니다. 아파치 코먼 컬렉션은 즉시 적합한 것은없는 것 같습니다.

+0

어떤 작업 당신은 당신의 테이블을 가질 필요합니까? 너는 그걸로 무엇을 할거니? 만약 당신이 아무런 도움이 필요 없다면 BalusC의 콩이 당신에게 맞는 것 같습니다. – Justin

+0

에는 최소한의 이름이 지정된 열 머리글이 있어야합니다. 어쩌면 로직을 결합 할 수도 있습니다. 하루 종일 작업 할 때 테이블 지향 처리가 가능하지만 작업을 데이터베이스에로드하고 작업을 실행하는 것은 과도합니다. 현재 일부 List 주위에서 일부 논리를 래핑했습니다. –

답변

6

일반적으로은 Javabeans의 List 또는 Set을 사용합니다. 각 Javabean은 데이터베이스의 행과 같이 하나의 실제 엔티티를 나타냅니다.

public class User { 
    private Long id; 
    private String name; 
    private Integer age; 
    // Add/generate getters+setters. 
} 

List 인덱스에 의해 빠른 접근 방법을 제공한다

List<User> users = new ArrayList<User>(); 
users.add(new User(1L, "foo", 30)); 
users.add(new User(2L, "bar", 20)); 
//... 

와 예를 들어 User.

속성 (열)의 양이 정해지지 않은 경우 키가 속성 (열) 이름을 나타내는 대신 Map<String, Object>을 사용하는 것이 좋습니다.

List<Map<String, Object>> table = new ArrayList<Map<String, Object>>(); 
Map<String, Object> row = new HashMap<String, Object>(); 
row.put("id", 1L); 
row.put("name", "foo"); 
row.put("age", 30); 
table.add(row); 
// ... 

단순한 Javabean보다 약간의 오버 헤드가 추가됩니다. 그 이유는 이러한 문자열 키가 힙에도 저장되어야하기 때문입니다.

열 이름을 신경 쓰지 않는다면 List<List<Object>> 또는 덜 유연한 Object[][]으로 넘어갈 수도 있습니다. 두 가지 모두를 사용하면 xy까지 요소에 쉽게 액세스 할 수 있습니다.

0

아마도 DefaultTableModel과 같은 것이 귀하의 요구 사항을 충족시킬 것입니다. 이것은 일반적으로 데이터를 표시하기 위해 JTable과 함께 사용되지만 단독으로 사용할 수도 있습니다.

RowTableModel에 기반한 BeanTableModel에는 데이터 행에 더 쉽게 액세스 할 수있는 몇 가지 동적 기능이 있습니다.

2

인 메모리 데이터베이스 (예 : HSQLDB 또는 H2)을 사용하지 않는 이유는 무엇입니까? 그들은 매우 가볍고 빠름이며 원하는 것처럼 보이는 JDBC 인터페이스를 제공하고 언급 한 JOIN 기능을 제공합니다.

0

Java 6에는 CachedRowSet 인터페이스가 있으며 Sun 클래스 인 CachedRowSetImpl이 있습니다. 이것은 아마도 당신이 찾고있는 것 중에서 가장 가까운 것입니다. ResultSet으로 채워지도록 설계되었습니다.

그게 맞는다면 그것은 아마도 당신이 찾고있는 것일 것입니다.

그렇지 않은 경우 올바르게 채우는 데 문제가있을 수 있습니다.

2

Google Guava 라이브러리는 몇 가지 일반적인 용도 (HashBasedTable, TreeBasedTable)를 제공합니다. 클래스는 일반 클래스이므로 모든 클래스가 행/열 키 역할을 할 수 있습니다.워드 프로세서에서

예 :

Table<Vertex, Vertex, Double> weightedGraph = HashBasedTable.create(); 
weightedGraph.put(v1, v2, 4.0); 
weightedGraph.put(v1, v3, 20.0); 
weightedGraph.put(v2, v3, 5.0); 

weightedGraph.row(v1); // returns a Map mapping v2 to 4, v3 to 20 
weightedGraph.column(v3); // returns a Map mapping v1 to 20, v2 to 5