1

データベースプログラムを作っています。ユーザーが自分の列を好きなだけ定義できるようにしたい。クラスファイルで各レコードをどのように定義しますか?(プロパティはユーザーごとに異なるため)


これは学校の課題の一部です。教師が追加できるさまざまな生徒のさまざまなスコアなどを保持しますが、新しい課題 test(a column) を追加することもできます。

4

5 に答える 5

2

この種のデータベース設計が必要なので、新しい「列」(クラス プロパティ) などを追加する必要はありません。

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

sを使用して Java クラス設計に変換できるはずですMap

これは宿題なので、Javaコードではなく、特にDB設計(「疑似コード」)を提供しています。

参考までに: REF は参照 (DB 言語の外部キー) の略です。

于 2012-10-05T14:59:39.060 に答える
1

データベースの実行中に列を追加および削除する場合、通常は設計が間違っていることを示しています。あなたの「列」は、おそらく単一のテーブルの行に対応しているはずです。

于 2012-10-05T14:46:47.413 に答える
1

実際にはクラスは必要ありません。基本的に、Java の世界では、すべてのクラスを実行する前にコンパイルする必要があります。そのため、プロパティに基づいてクラスにフィールドを動的に追加することは、適切なアプローチではありません。むしろ、コレクションを使用することをお勧めします。これは次のように実現できます。

List<Map<String,Object>> data;

列の値のキーと値としてマップのような列名を持つことができます。キーはプロパティで構成でき、データは任意の順序で保存できます。

于 2012-10-05T14:48:48.180 に答える
0

データベーステーブルに対してクラスを生成する「何か」が必要です。

休止状態を見てください

それにはさまざまな方法があります。

http://www.hibernate.org/subprojects/tools.html

http://www.wikihow.com/Generate-Hibernate-Pojo-Classes-from-DB-Tables

于 2012-10-05T14:48:24.967 に答える
0

このタイプのタスクでの主な問題は、構成を保存する方法です。構造変更ごとにクラスを作成する必要はありません。

タスクを 3 つに分割する必要があります。

  1. テーブル定義を拡張するには?
  2. そのようなテーブルに対してクエリを実行する方法は?
  3. クエリ結果から結果を表示するには?

A1: テーブルを拡張するには?

列を使用してテーブルを拡張する場合は、そのためのデータが必要です。

したがって、ユーザーから取得する必要があります。

  • テーブル名
  • 列名
  • 列の種類

これらのデータがあれば、列を追加する ALTER ステートメントを簡単に作成できます。


A2: 動的テーブルでクエリを実行する方法は?

ここでは、巧妙または通常の 2 つのオプションがあります。

  • 通常は、ユーザー入力をいくつかのテーブルに保存します
  • 賢いのは、データベース テーブル情報を使用することです。

これらのデータをどのように取得するかはあなた次第です。重要なのは、それらをアプリケーションにどのように保存するかです。テーブルをマップするオブジェクトを作成することをお勧めします。

結果セット

TABLE_A | COLUMN_1 | String
TABLE_A | COLUMN_2 | Integer
TABLE_A | COLUMN_3 | Boolean

単純化されたコード

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 は値です。重要なのは、主キーを定義することです。これにより、これが新しい行であることを簡単な方法で確立できるため、更新のみが必要な古い行または古い行を挿入する必要があります。

public class TableRow {

 private Map<UserTableColumn,Object> rowData = new HashMap<UserTableColumn,Object>();

 public Object getValue(UserTableColumn column);
 public void setValue(UserTableColumn column, Object value);

}

この短い説明があなたのニーズを満たすことを願っています。

幸運を !

于 2012-10-05T15:36:01.747 に答える