2013-05-18 70 views
1

我想這個接口的方法this教程這裏解釋:DatabaseMetaData接口不起作用?

在這裏,我去:

DatabaseMetaData dm = con.getMetaData(); 
System.err.println(dm.supportsResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE)); 

我知道它支持TYPE_SCROLL_SENSITIVE類型。因爲我正在使用它,它的工作原理。 但是,上面報告的方法返回false。你有沒有嘗試過使用這種方法?如果是,它是否正常工作?提前致謝。

PS:與其他兩種類型的ResultSets(TYPE_SCROLL_INSENSITIVETYPE_FORWARD_ONLY)相同。 考慮到TYPE_FORWARD_ONLY是默認類型,這有點奇怪,我在所有三種情況下得到false更新:我正在使用JDBC-Mysql驅動程序;

+2

您正在使用哪種JDBC驅動程序和DBMS?僅僅因爲你可以使用'TYPE_SCROLL_SENSITIVE'來請求一個ResultSet並不意味着你真的得到了一個。 –

+0

'DatabaseMetaData'是一個接口,所提供的實際信息取決於您的驅動程序實現,以及它們是否正確實現了'DatabaseMetaData'。 –

+0

MySql JDBC驅動程序 – Rollerball

回答

0

在MySQL連接器/ J 5.1.21的實現是:

public boolean supportsResultSetType(int type) throws SQLException { 
    return (type == ResultSet.TYPE_SCROLL_INSENSITIVE); 
} 

然而快速瀏覽一下實施的其餘表明,MySQL也支持其他類型。

0

假設你的意思是Connector/J驅動(有不止一個JDBC驅動程序爲MySQL),從MySQL Connector/J JDBC implementation notes

  • 「MySQL不支持SQL光標,JDBC驅動程序不會效仿他們「,並
  • 」默認情況下,ResultSets完全檢索並存儲在內存中。「

由於TYPE_SCROLL_SENSITIVETYPE_SCROLL_INSENSITIVETYPE_FORWARD_ONLY通常表明遊標類型,然後,司機甚至沒有試圖模仿他們也許可以解釋爲什麼聲明回報supportsResultSetType(...)爲FALSE所有值。通過將整個結果集保存在內存中的默認行爲,僅向前模式或滾動模式將無關緊要。