2013-05-30 71 views
2

我在Oracle中創建下表:甲骨文:整場返回NUMBER

CREATE TABLE TEST 
(
DKEY INTEGER NOT NULL PRIMARY KEY, 
NOM VARCHAR2(255) NOT NULL 
) 

當我嘗試使用這個Java代碼來獲取DKEY字段的類型,我得到以下結果:

DatabaseMetaData md = cnx.getMetaData(); 
ResultSet rsmd = md.getColumns(null, strSchema, strTableName, "%"); 
while (rsmd != null && rsmd.next()) { 
    String strTmp = rsmd.getString("SQL_DATA_TYPE"); // this return 0 for field DKEY 
    int intDType = rsmd.getInt("DATA_TYPE");   // this return 3 for field DKEY 
    String strFType = rsmd.getString("TYPE_NAME")  // this return NUMBER for field DKEY 
} 

爲什麼我得到NUMBER而不是INTEGER?

+0

你讀到描述了可用的數據類型在Oracle手冊中的一章?因爲那確實回答你的問題。 –

回答

5

儘管您可以在SQL語句中指定INTEGER作爲數據類型,但Oracle在其實現中將使用NUMBER(38)

請參閱Oracle數據類型herethis文章。

+0

謝謝你的回答,還有一個問題:爲什麼rsmd.getString(「COLUMN_SIZE」)返回0而不是38?有沒有另一種方法來獲得大小?我試過getPrecision,但它也返回0 – user2318955

+0

如果您閱讀getPrecision的javadoc,http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSetMetaData.html#getPrecision(int),它表示_0返回列大小不適用的數據類型。我不知道任何其他方式。使用SQL通過DESCRIBE語句或任何Oracle使用的表來獲取表元數據。 –

+0

如果您指定整數,數字或數字(*,n)(其中n>> = 0),getPrecision將返回0. http://sqlfiddle.com/#!4/be559/2 –

0

我認爲表列DKEY屬性類型是NUMBER

但是儘量

while (rsmd != null && rsmd.next()) { 
    String strTmp = rsmd.getString("SQL_DATA_TYPE"); // this return 0 for field DKEY 
    int intDType = Integer.parseInt(rsmd.getLong("DATA_TYPE"));   // this return 3 for field DKEY 
    String strFType = rsmd.getString("TYPE_NAME")  // this return NUMBER for field DKEY 
}