2013-06-28 2 views
0

안녕하세요, 파일에서 테이블 스키마를 읽고 JDBC를 사용하여 테이블을 만들어야하는 시나리오가 있습니다.Java에서 데이터베이스 테이블 스키마 (> 50 열)를 저장하는 방법

예 : 파일이 포함되어 있습니다.

{"ColumnTypes":["int32","fstring32"],"ColumnNames":["ProductId",","ProductName"]} 

이제 JDBC 실행 쿼리를 사용하여 런타임에 테이블을 생성해야합니다. 내가 배열 배열을 사용하여 테이블을 생성한다고 가정하면, 반값 배열에 데이터 타입이 포함 된 다음, 모든 값을 직접 입력해야합니다. 가장 효과적인 방법은 무엇입니까?

안내주세요 ([1], 도착 [26] 도착 [2], 도착 [26] 도착 ..... [25] 도착 [50] 도착) 테이블 (TB1)을 생성한다. 미리 감사드립니다.

+0

인덱스를 알고있을 때 배열이 더 빠릅니다 (HashMap은 배열 뒤에서 연결된 목록의 배열을 사용하여 배열 위의 약간의 오버 헤드를 추가하여 수행해야하는 해시 작업은 언급하지 않습니다) –

답변

1

를 회개하지 않습니다 http://flywaydb.org/ 또는 http://www.liquibase.org/에서 볼 수도없고 추가 정보 외래 키 참조 또는 기타 제약 조건이있는 경우 Map<String, String>이면 충분합니다. 수업을 만들 수 있습니다 (예 : TableDef : 당신이 중복 된 열 이름이 없는지 확신 할 수있는 경우 스키마 정의를 읽는 동안

또는
public class TableDef { 
    private final String tableName; 
    private final Map<String, String> colDef = new LinkedHashMap<String, String>(); 

    public TableDef(String tableName) { 
    this.tableName = tableName; 
    } 

    public void addColumn(String name, String type) { 
    if (colDef.containsKey(name)) 
     throw new IllegalArgumentException(name + " column already added"); 
    colDef.put(name, type); 
    } 

    public String getCreateTable() { 
    String ddl = "CREATE TABLE " + tableName + "("; 
    for (Map.Entry<String, String> col : colDef.entrySet()) { 
     // add column to ddl 
    } 
    return ddl + ")"; 
    } 
} 

, 동적으로 CREATE TABLE 문을 만들 수있다. 그러나 수천 개의 열과 표가 없으면 성능에 큰 차이가 없습니다.

효율적인 방법으로 대량 데이터를 삽입하려면 look at this answer을 가져 가십시오.

0

당신이 필요로하는 모든이 일반적으로 데이터베이스 테이블을 만들거나 마이그레이션하는 경우 데이터베이스 정의가 정말에만 이름/타입 쌍을 포함 할 경우

관련 문제