2011-10-19 4 views
0

ProgressDBで正常に動作しているデータベースコードが長時間存在しています。最近、JDBC 4ドライバを使用してSQL Server 2008を試しました。例外は次のとおりです。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

ありがとうございます。私はこのコードを試して、それも動作します。私の混乱は、%がカタログの有効な値でない場合、私のコードが進捗DBで動作している理由です.2番目に、私はDatabaseMetaDataのjavadocを読むことによって%の使用法を理解できません。文字列の例を提供すると非常に便利です: – Habin

+0

Javadocは実際にはかなり明確です:他のすべてのパラメータは "xxxx *パターン*"として文書化されていますが、最初のものはdocumenteです。 "catalog * name *"。 –

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

代わりの%を与え、connnection.getCatalog()はissue.Interestingの事を修正するコードは、Oracle、MySQLと進歩して動作することです。 Sql Serverだけがエラーを投げています。

+0

Oracleには "カタログ"の概念がありません。私が知る限り、ドライバは単にそのパラメータを無視します。 –