如何定义具有变量属性的类?

时间:2012-10-05 14:38:47

标签: java database

我正在制作一个数据库程序。我希望用户能够根据需要定义自己的列。然后,我如何在其类文件中定义每个记录?(因为属性将是用户与用户不同)


这是学校作业的一部分 - 它会为他们可以添加的不同学生保留不同的分数和教师的喜欢,但他们也可以添加新的作业,测试(专栏)。

5 个答案:

答案 0 :(得分: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

您应该能够使用Map s。

转换为Java类设计

我特意提供DB设计(“伪代码”)而不是Java代码,因为这是作业。

仅供参考:REF代表参考(DB语言中的外键)。

答案 1 :(得分:1)

如果要在数据库运行时添加和删除数据库,通常表明您的设计是错误的。您的“列”可能应该对应于单个表中的行。

答案 2 :(得分:1)

你实际上不需要上课。基本上,在Java世界中,所有类都需要在执行之前进行编译。因此,基于属性动态地向类添加字段不是一个好方法。相反,我建议你使用集合。这可以通过以下方式实现:

List<Map<String,Object>> data;

您可以将Map like列名作为键值的键和值。可以在属性中配置密钥,并且可以按任何顺序存储数据。

答案 3 :(得分:0)

你需要“东西”来为你的数据库表生成类。

查看Hibernate

有不同的方法可以做到这一点:

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

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

答案 4 :(得分:0)

在此类任务中,主要问题是如何存储配置。您不需要为每个结构修改创建一个类。

你应该把你的任务分成三个。

  1. 如何扩展表定义?
  2. 如何对这样的表运行查询?
  3. 如何显示查询结果的结果?

  4. A1:如何扩展表格?

    如果要扩展带有列的表,则应该有一些数据来执行此操作。

    所以你应该从用户处获得:

    • 表名
    • 列名
    • 列类型

    您可以轻松获得这些数据,创建一个ALTER语句来添加列。


    A2:如何在动态表上执行查询?

    我们这里有两个选项,聪明或正常。

    • 正常是将用户输入存储到某个表
    • 聪明就是使用数据库表信息。

    如果你将如何重新检索这些数据,那么你将如何将它们存储在你的应用程序中。我建议你创建一些将映射表的对象。

    结果集

    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);
    
    }
    

    我希望这个简短的解释符合您的需求。

    祝你好运!