-
mysql jdbc驱动/oracle jdbc驱动/sql server jdbc驱动/sybase jdbc驱动/db2 jdbc驱动
2003年,DingL.com站长在项目开发过程中遇到了一个很棘手的问题。
问题是这样的。项目需要对130多张表进行维护,要同兼容oracle/sql server/sybase三种数据库。其中oracle数据库的表设计中,字符型的主键被设计成了char类型,我们知道char是固定长度的类型。这里有两种情况,一是此主键只保存单字节字符,这样是不会出现问题的,如果主键是中文等双字节字符时就会出现问题了。因为对于中文字符串,数据库在计算其长度时一个中文算两个长度,而在java中,一个中文只算一个长度。这样尽管我们在将值传给数据库前在其后面补了空格,在所有的where子句中(注意,字段是主键)的比较是不会相等的(因其空格个数不一样),因为java和数据库的长度计算方式不一样。所以,在java传值给数据库前必须把检测中文的个数,然后再去补相应的空格数。
然而,要命的是,数据库的设计我们无法更改,也就是不能把主键的类型改为varchar2,况且varchar2类型在作索引时效率要比char类型差。
更要命的时,当时发现存在这样的问题时,项目已经接近尾声了。由于涉及的表众多,如果要更改已经编写好的代码将花费相当多的精力和时间。
如果我们能在PreparedStatement.setString()方法中去计算要补空格的个数就可以不修改已有的代码,从而解决问题。但我们知道,ResultSet、Statement、PreparedStatement、Connection等都只是接口,具体的实现类都是各JDBC驱动实现的,每个不同类型厂商的驱动实现都是不一样的。如果我们能有自己的PreparedStatement类实现就能解决问题了,通用JDBC驱动程序就这样诞生了。
通用驱动从驱动注册开始入手,拥有自己的URL、驱动类、Connection等实现。
通用驱动其内核其实还是各官方提供的JDBC驱动,所以在使用过程中同样需要把各官方驱动加到classpath中才能正常使用。目前支持Oracle JDBC驱动、SQL Server JDBC驱动、Sybase JDBC驱动、MySql JDBC驱动,通过修改源码和配置文件可支持任意的type4 JDBC驱动。下载通用JDBC驱动及源码
通用JDBC驱动程序及源码均可在网上自由传播及免费使用。作为商业用途,若由于通用驱动程序的BUG或缺陷造成的损失DingL.com及站长概不负责,且DingL.com不提供任何技术支持,请谨慎使用!
下载通用驱动程序,请点击 这里
下载通用驱动程序源码,请点击
