2011-10-19 51 views
0

我們有一個很長時間的數據庫代碼,它已經與Progress DB成功運行。最近,我們用SQL Server 2008與JDBC 4驅動程序一起嘗試了它。它給出了以下例外:DatabaseMetaData.getColumns()給SQL Server 2008帶來的錯誤

數據庫'%'不存在。確保名稱輸入正確。

DatabaseMetaData conMD = connection.getMetaData(); 
ResultSet columns = conMD.getColumns("%", "%", m_Table, "%"); 

有人能幫我嗎?

回答

0

如果您之前獲得目錄列表?

隨着方法getCatalogs()

http://download.oracle.com/javase/1.4.2/docs/api/java/sql/DatabaseMetaData.html#getCatalogs() 
0

作爲錯誤消息指出:不能傳遞數據庫(目錄)參數的通配符。通配符僅適用於架構,表和列名稱。

改爲使用null。

conMD.getColumns(null, "%", m_Table, "%"); 
+0

謝謝。我試過這段代碼,它也可以工作。我的困惑是爲什麼我的代碼與進度數據庫一起工作,如果%不是目錄的有效值。第​​二,通過閱讀DatabaseMetaData的javadoc,我無法理解%的用法。它有點令人困惑:(如果你提供一個字符串例子,它將會非常有用 – Habin

+0

Javadoc實際上非常清晰:所有其他參數都記錄爲「xxxx * pattern *」,而第一個參數記錄爲「catalog * name *」。 –

0
conMD.getColumns(connnection.getCatalog(), "%", m_Table, "%"); 

,而不是給予%,connnection.getCatalog()將解決issue.Interesting的事情是,代碼工作與Oracle,MySQL和進展。只有Sql Server正在拋出錯誤。

+0

Oracle沒有「目錄」的概念。據我所知,驅動程序簡單地忽略了這個參數。 –