JDBC和ADO .NET

 我最先学习.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!

posted on 2004-07-07 22:42  温少  阅读(3410)  评论(0编辑  收藏  举报

导航