2011-09-29 76 views
1

我有一個Java Web應用程序。我必須創建一個表並使用JDBC。我如何在Java中創建具有可變列的數據庫表?

我不知道在我的列表標籤中會有多少值,因此對於每個值標籤,我需要我的表中的相應列。這些值是從其他應用程序中獲取的。

這樣我就可以產生具有ň其中ň每次都可以是不同的列數的表。

<list> 
<value>Name</value> 
<value>Address</value> 
<value>Contact No</value> 
.. 
. 
. 
</list > 

我該如何做到這一點?

+0

你使用了哪個數據庫?什麼是你的價值的最大長度? VARCHAR或CLOB列類型將是合適的,但它取決於數據庫和值的長度。 –

+0

我正在使用Oracle Databasse..All是varchar2(30).. – vikiiii

+0

您是否試圖根據列表中的值創建表?或者你是否試圖從已經創建的表中選擇列?按照這個問題,它看起來像你試圖創建..如果你是,那麼你將需要使用一個創建表語句,幷包含在列表中指定的列。列類型如何?主鍵怎麼樣?如何索引?正試圖編寫一個應用程序來爲您管理數據庫? – sethu

回答

-1

你需要動態地處理你的表結構。 存在幾種解決方案。

使用JDBC,只需查詢Oracle並檢索表格的列。

String myTable = "FOO_TABLE"; 
String query = "Select COLUMN_NAME from USER_TAB_COLUMNS where TABLE_NAME=?"; 
PreparedStatement ps = conn.prepareStatement(query); 
ps.setString(1, myTable); 
// 
Set<String> existingColumns = new HashSet<String>(); 
ResultSet rs = ps.executeQuery(); 

while (rs.next()) 
{ 
    existingColumns.add(rs.getString(1)); 
} 

現在你知道哪個列的存在與否,您可以ALTER你的表,只要你想。

+0

雖然這在技術上是可行的,但我懷疑應用程序應該動態更改數據庫表 – michael667

+0

我不這麼認爲。升級數據庫模式版本的更新階段是合理的(例如在ERP應用程序中),您的棄權投票是冒犯性的。你的回答是一個建議,而不是對問題的迴應。 – Destroyica

+0

我同意更新階段,但這不是應用程序的「正常」操作。如果您動態地創建/更改數據庫表,您還必須動態訪問它們(可能是代碼生成?),這意味着您實現了一個過於複雜的鍵/值存儲。 – michael667

0

您應該使用n行來存儲值,而不是n列。列以某種方式「固定」在數據庫中,而添加/刪除/修改行很容易。

相關問題