2012-10-05 67 views
1

我正在製作一個數據庫程序。我希望用戶能夠根據自己的需要定義自己的列。我怎麼會那麼在它的類文件中定義的每個記錄?(由於性能會有所不同用戶到用戶)如何定義具有變量屬性的類?


這是一所學校的部分配,這將持有不同的分數和喜歡的老師他們可以添加不同的學生,但他們也可以添加新的作業,測試(一欄)。

+0

聽起來相當具有挑戰性..更多詳細信息? – Coffee

+0

你的意思是說表格是動態的,映射到它的對象也應該是動態的? –

+0

有數百種不同的方式來處理這個問題,但沒有一個是完美的。嘗試展示你的創造力和對語言的掌握 - 而不是尋求「完美」的解決方案(你的教練知道這是不可能的),而是設計靈活和「健壯」的東西,這種東西可以容易地擴展而不會分崩離析或過度複雜。如果你的導師完全理解,你會爲這樣的設計獲得更好的成績,而不是你脫離網絡的東西。 –

回答

1

如果您想在數據庫運行時向數據庫添加和刪除列,那通常表示您的設計錯誤。你的'列'可能對應於單個表中的行。

1

實際上,你不需要一個類。基本上,在Java世界中,所有類都需要在可執行之前進行編譯。所以基於屬性動態地向字段添加字段並不是一個好方法。相反,我會建議你使用集合。這可以通過如下方式實現:

List<Map<String,Object>> data; 

您可以將Map之類的列名稱作爲鍵值和列值。密鑰可以在屬性中配置,數據可以按任何順序存儲。

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一個Java類設計秒。

我特別給DB設計(「僞代碼」),而不是Java代碼,因爲這是作業。

供參考:REF代表參考(DB語言中的外鍵)。

+0

我確定其他答案是正確的,但這是最容易理解的 - 謝謝! – user1723326

0

在這種類型的任務中,主要問題是如何存儲配置。您不需要爲每個結構修改創建一個類。

你應該把你的任務分成三份。

  1. 如何擴展表定義?
  2. 如何對這樣的表執行查詢?
  3. 如何顯示查詢結果?

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

} 

我希望這個簡短的解釋符合您的需求。

祝你好運!

相關問題