我最先學習.NET,使用了大約三年後,就轉向在Java上開發程式。剛開始使用JDBC時,覺得其介面比較奇怪,奇怪的地方如下:
1、PreparedStatement派生自Statement,但是Statement中的一些public的方法,例如execute(String sql)等方法,使不能被PreparedStatement的執行個體調用的。
2、其參數的計數是從1開始的,而不是我們習慣使用的0。這是一個地雷,等著你去踩的,最初使用的人,通常都會踩中地雷,我想JDBC的設計者此時就會偷笑,哈哈!又有一個SB中招了……
3、PreparedStatement的setString()方法,不區分NChar和Char,這使得一些資料庫的Driver無法支援NChar和NVarchar類型的資料。如Oracle 8i的JDBC Driver是明確寫了不支援NChar、NVachar2類型。在Oracle 9i的Driver中有一種專有的實現setFormOfUse(...),可以解決此問題,但如此一來,就不可以基於JDBC介面編程了,也無法更換JDBC Driver了。
JDBC介面的設計者一定是一個整蠱專家!!
ADO.NET 帶了一系列支援Disconnected訪問資料的類,包括DataSet、DataTable等,使得訪問資料很簡單,其介面也很方便使用。ADO.NET具備微軟產品使用簡單的優點,也和微軟產品的一貫作風一樣,顯得有點小家子氣。其中一點就是,雖然SqlClient、OracleClient、OleDb、Odbc等DbProvider都是繼承同樣的介面,但是這並不能使你可以在ADO.NET中基於介面編程。其中一個原因是,其不同的DbProvider的Sql的參數風格是不一樣的。SQL Server使用@ParameterName風格的具名引數,Oracle使用:ParameterName的風格,而OleDb和Odbc都使用匿名參數。天下大亂,一蹋糊塗!!!
在ADO.NET中,更換DbProvider並不如JDBC那麼容易,可以說ADO.NET的開放性比JDBC差。ADO .NET 2.0似乎在這方面做了一些增強措施。但是還是不如JDBC!