我正在製作一個數據庫程序。我希望用戶能夠根據自己的需要定義自己的列。我怎麼會那麼在它的類文件中定義的每個記錄?(由於性能會有所不同用戶到用戶)如何定義具有變量屬性的類?
這是一所學校的部分配,這將持有不同的分數和喜歡的老師他們可以添加不同的學生,但他們也可以添加新的作業,測試(一欄)。
我正在製作一個數據庫程序。我希望用戶能夠根據自己的需要定義自己的列。我怎麼會那麼在它的類文件中定義的每個記錄?(由於性能會有所不同用戶到用戶)如何定義具有變量屬性的類?
這是一所學校的部分配,這將持有不同的分數和喜歡的老師他們可以添加不同的學生,但他們也可以添加新的作業,測試(一欄)。
如果您想在數據庫運行時向數據庫添加和刪除列,那通常表示您的設計錯誤。你的'列'可能對應於單個表中的行。
你需要「某些東西」來根據你的數據庫表生成這些類。
看一看Hibernate
有不同的方法來做到這一點:
http://www.hibernate.org/subprojects/tools.html
http://www.wikihow.com/Generate-Hibernate-Pojo-Classes-from-DB-Tables
我編輯了我的答案 –
實際上,你不需要一個類。基本上,在Java世界中,所有類都需要在可執行之前進行編譯。所以基於屬性動態地向字段添加字段並不是一個好方法。相反,我會建議你使用集合。這可以通過如下方式實現:
List<Map<String,Object>> data;
您可以將Map之類的列名稱作爲鍵值和列值。密鑰可以在屬性中配置,數據可以按任何順序存儲。
你需要這種數據庫設計的,所以你不需要添加新的「列」(類屬性)或任何東西:
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代碼,因爲這是作業。
供參考:REF代表參考(DB語言中的外鍵)。
我確定其他答案是正確的,但這是最容易理解的 - 謝謝! – user1723326
在這種類型的任務中,主要問題是如何存儲配置。您不需要爲每個結構修改創建一個類。
你應該把你的任務分成三份。
A1:如何延長表?
如果你想用列擴展一個表,你應該有一些數據來做到這一點。
所以,你應該從用戶那裏得到:
有了這些數據,你可以很容易地創建一個ALTER語句添加列。 A2:如何在動態表上執行查詢?如何在動態表上執行查詢?
我們在這裏有兩個選項,聰明或正常。
因此,您將如何檢索這些數據什麼是importart是如何將它們存儲在yor應用程序中。我建議你創建一個映射表的對象。
的結果集
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));
具有這樣的結構你ABRE輕鬆創建針對這種表的查詢。
A3:如何操作動態表中的數據?
這是一個棘手的部分。有多種方式可以做到這一點。不太複雜的是創建一個具有鍵值結構的對象。其中鍵是列名,值是值。重要的是定義主鍵和indentfier,它們允許您以簡單的方式確定這是新行,因此您應該插入它或舊的只需要更新。
public class TableRow {
private Map<UserTableColumn,Object> rowData = new HashMap<UserTableColumn,Object>();
public Object getValue(UserTableColumn column);
public void setValue(UserTableColumn column, Object value);
}
我希望這個簡短的解釋符合您的需求。
祝你好運!
聽起來相當具有挑戰性..更多詳細信息? – Coffee
你的意思是說表格是動態的,映射到它的對象也應該是動態的? –
有數百種不同的方式來處理這個問題,但沒有一個是完美的。嘗試展示你的創造力和對語言的掌握 - 而不是尋求「完美」的解決方案(你的教練知道這是不可能的),而是設計靈活和「健壯」的東西,這種東西可以容易地擴展而不會分崩離析或過度複雜。如果你的導師完全理解,你會爲這樣的設計獲得更好的成績,而不是你脫離網絡的東西。 –