나는 데이터베이스 프로그램을 만들고있다. 사용자가 원하는만큼 많은 열을 정의 할 수 있기를 바랍니다. 나는 다음의 클래스 파일의 각 레코드를 정의 할 어떻게?변수 속성으로 클래스를 정의하는 방법은 무엇입니까?
그것은 학교의 일부 할당-는 교사에 대해 서로 다른 점수와 좋아하는 보유 것 (속성은 사용자가 다른 사용자 것 때문에) 그들이 추가 할 수있는 다른 학생들도 있지만 새로운 과제 인 test (컬럼)를 추가 할 수 있습니다.
나는 데이터베이스 프로그램을 만들고있다. 사용자가 원하는만큼 많은 열을 정의 할 수 있기를 바랍니다. 나는 다음의 클래스 파일의 각 레코드를 정의 할 어떻게?변수 속성으로 클래스를 정의하는 방법은 무엇입니까?
그것은 학교의 일부 할당-는 교사에 대해 서로 다른 점수와 좋아하는 보유 것 (속성은 사용자가 다른 사용자 것 때문에) 그들이 추가 할 수있는 다른 학생들도 있지만 새로운 과제 인 test (컬럼)를 추가 할 수 있습니다.
실행중인 데이터베이스에 열을 추가하고 제거하려는 경우 일반적으로 디자인이 잘못되었음을 나타냅니다. '열'은 아마도 단일 표의 행과 일치해야합니다.
데이터베이스 테이블에 대해 클래스를 생성하는 "무언가"가 필요합니다. 당신은 실제로 클래스를 필요 없어요
http://www.hibernate.org/subprojects/tools.html
http://www.wikihow.com/Generate-Hibernate-Pojo-Classes-from-DB-Tables
나는 나의 대답을 편집했다 –
:
그렇게 여러 가지 방법이 있습니다 Hibernate에서보세요. 기본적으로 Java 세계에서는 모든 클래스를 컴파일해야 실행될 수 있습니다. 속성을 기반으로 클래스에 동적으로 필드를 추가하는 것은 좋은 방법이 아닙니다. 컬렉션을 사용하는 것이 좋습니다. 이것은 다음과 같이 이루어질 수 있습니다 :
List<Map<String,Object>> data;
지도와 같은 열 이름을 열 값의 키 및 값으로 사용할 수 있습니다. 키는 등록 정보에서 구성 할 수 있으며 데이터는 임의의 순서로 저장할 수 있습니다.
당신은 데이터베이스 설계의이 종류를 필요, 그래서 당신은 새로운 "열"(클래스 속성) 또는 아무것도 추가 할 필요가 없습니다 :
TEACHERS (Class called Teacher)
________
TeacherId
Name
STUDENTS (Class called Student)
________
StudentId
Name
ASSIGNMENTS (Class called Assignment)
___________
AssignmentId
TeacherId (REF)
Name
GRADES (Class called Grade)
______
AssignmentId (REF)
StudentId (REF)
Grade
당신은 Map
를 사용하여 Java 클래스 디자인에 변환 할 수 있어야한다을 에스.
숙제이기 때문에 특별히 DB 디자인 ("의사 코드")을 제공하고 Java 코드는 제공하지 않습니다.
FYI : REF는 참조 용입니다 (DB 언어의 외래 키).
나는 다른 대답이 맞을 것이라고 확신하지만 이것은 이해하기 쉽다 - 고마워요! – user1723326
이 작업 유형의 주된 문제점은 구성을 저장하는 방법입니다. 각 구조 수정에 대한 클래스를 만들 필요가 없습니다.
작업을 3 개로 나누어야합니다.
A1 : 어떻게 테이블을 확장하려면?
열이있는 테이블을 확장하려면 해당 데이터가 있어야합니다.쉽게 열을 추가하는 ALTER 문을 만들 수있는 그 데이터를 갖는
:
그래서 당신은 사용자로부터 얻어야한다 .
대답 : 동적 테이블에서 쿼리를 실행하는 방법은 무엇입니까?
여기에는 영리하거나 정상적인 두 가지 옵션이 있습니다.
입수 할 수있는 데이터는 어떻게 가져올 것입니까? importart는 어떻게 저장합니까? 테이블을 매핑 할 개체를 만들 것을 제안합니다.
이 결과는 당신이 쉽게 테이블에 대해 쿼리를 작성하는 abre입니다 같은 구조를 갖는
TABLE_A | COLUMN_1 | String
TABLE_A | COLUMN_2 | Integer
TABLE_A | COLUMN_3 | Boolean
Simplyfied 코드
UserTable userTable = new UserTable("TABLE_A");
userTable.addColumn(new UserTableColumn("COLUMN_1",String.class));
userTable.addColumn(new UserTableColumn("COLUMN_2",Integer.class));
userTable.addColumn(new UserTableColumn("COLUMN_3",Boolean.class));
을 설정합니다.
A3 : 동적 테이블에서 데이터를 조작하는 방법은 무엇입니까?
이것은 까다로운 부분입니다. 이를 수행하는 방법에는 여러 가지가 있습니다. 덜 복잡한 것은 키 - 값 구조를 갖는 객체를 만드는 것입니다. 여기서 key는 열 이름이고 value는 값입니다. 중요한 것은 기본 키를 정의하는 것입니다.이 키를 사용하면 간단한 방법으로 새 행을 삽입 할 수 있으므로 기존 키를 삽입해야하거나 이전 키만을 업데이트해야합니다.
이 간단한 설명이 사용자의 요구를 충족 시키길 바랍니다.
행운을 빈다.
상당히 까다로운 소리 ... 자세한 내용? – Coffee
테이블이 디 마이 미성 (dymamic)이고 매핑 된 객체가 동적이어야한다고 말합니까? –
이 문제를 처리하는 데는 여러 가지 방법이 있지만 그 중 아무 것도 완벽하지 않습니다. 강사가 불가능하다고 생각하는 "완벽한"솔루션을 찾는 것보다 창의력을 발휘하고 언어를 파악하십시오. 유연성이 뛰어나고 견고한 제품을 설계하십시오. 쉽게 흩어 지거나 과도하게 늘어나지 않고 쉽게 확장 할 수 있습니다. 복잡한. 강사가 모두 지각력이 있다면 당신은 그물에서 떨어지지 않은 그런 디자인보다는 더 나은 성적을 얻을 것입니다. –