我正在制作一个数据库程序。我希望用户能够根据需要定义自己的列。然后,我如何在其类文件中定义每个记录?(因为属性将是用户与用户不同)
这是学校作业的一部分 - 它会为他们可以添加的不同学生保留不同的分数和教师的喜欢,但他们也可以添加新的作业,测试(专栏)。
答案 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。
我特意提供DB设计(“伪代码”)而不是Java代码,因为这是作业。
仅供参考:REF代表参考(DB语言中的外键)。
答案 1 :(得分:1)
如果要在数据库运行时添加和删除数据库,通常表明您的设计是错误的。您的“列”可能应该对应于单个表中的行。
答案 2 :(得分:1)
你实际上不需要上课。基本上,在Java世界中,所有类都需要在执行之前进行编译。因此,基于属性动态地向类添加字段不是一个好方法。相反,我建议你使用集合。这可以通过以下方式实现:
List<Map<String,Object>> data;
您可以将Map like列名作为键值的键和值。可以在属性中配置密钥,并且可以按任何顺序存储数据。
答案 3 :(得分:0)
你需要“东西”来为你的数据库表生成类。
有不同的方法可以做到这一点:
http://www.hibernate.org/subprojects/tools.html
http://www.wikihow.com/Generate-Hibernate-Pojo-Classes-from-DB-Tables
答案 4 :(得分:0)
在此类任务中,主要问题是如何存储配置。您不需要为每个结构修改创建一个类。
你应该把你的任务分成三个。
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);
}
我希望这个简短的解释符合您的需求。
祝你好运!