|
Sybase JDBC驱动的改进(jConnect™ for JDBC)
兕丢疋没有魔法
适宜读者:
正在使用JSP建立网站,或者开发J2EE应用程序;
使用Sybase SQL Server做为数据库服务器;
要求不能改变数据库使用的字符集设置;
使用或不使用Hibernate等ORM工具;
如果你的情况正如上述,那么建议你阅读本文。
方法概述:
建立JDBC驱动程序的包装类,在包装类中加入改进的字符集和获取自动生成编号功能。
针对平台:
Windows 2000/XP(主要是使用新版cmd console的新增shell语法)
jConnect™ 5.5
Sybase公司于2001年推出的JDBC驱动程序jConnect™,至今似乎就没有改动过。目前最高版本为5.5,是按照J2SE 1.2规范设计的,而现在用得较多的是J2SE 1.4,因此有很多特性都没有提供。特别是国际化问题,jConnect™的实现一直在困扰我,直到有一天拿jConnect™和其它JDBC驱动作比较时才发现原来是jConnect™的BUG!
为了让读者不会被同样的问题困扰,我把具体的改进方法写出来,供大家参考:
首先需要对jConnect™逆向工程(侵犯版权?管不了那么多了!),将jconnect.jar解开,用jad对其反编译:
C:\jconnect>for /d /r %i in (*) do jad -s .java -d %i %i\*
有些.class文件可能无法正常解开,不过不要紧,因为我们只改动一个文件:
com/sybase/jdbc2/jdbc/SybDriver.java
除此之外,添加如下文件:
com/sybase/jdbc2/jdbc/CachedCharset.java
com/sybase/jdbc2/jdbc/_SybConnection.java
com/sybase/jdbc2/jdbc/_SybStatement.java
com/sybase/jdbc2/jdbc/_SybPreparedStatement.java
com/sybase/jdbc2/jdbc/_SybCallableStatement.java
com/sybase/jdbc2/jdbc/_SybResultSet.java
com/sybase/jdbc2/jdbc/P_Connection.java
com/sybase/jdbc2/jdbc/P_Statement.java
com/sybase/jdbc2/jdbc/P_PreparedStatement.java
com/sybase/jdbc2/jdbc/P_CallableStatement.java
com/sybase/jdbc2/jdbc/P_ResultSet.java
新增的文件用于实现新的特性,为了区别新旧两个JDBC,我们约定将连接URL改成如下格式:
jdbc:stupy(新增属性):sybase:Tds:<SERVER>:<PORT>/<DATABASE>
以区别于:
jdbc:sybase:Tds:<SERVER>:<PORT>/<DATABASE>
举例:
jdbc:stupy(charset=gb2312):sybase:Tds:127.0.0.1:5000/BookStore
为了识别这个新的URL,找到SybDriver.java中acceptsURL方法,加入:
public boolean acceptsURL(String url)
throws SQLException
{
if (url.startsWith("jdbc:stupy:"))
return acceptsURL(url.replaceFirst("stupy\\(.*?\\)?:", ""));
int index = url.indexOf('/');
if(index != -1)
……
同理,在SybDriver.java中connect(String url, Properties info)中加入同样的内容(为什么不是其它connect方法?因为我们只需要关心public的方法),同时根据URL返回不同的Connection对象:
public final Connection connect(String url, Properties info)
throws SQLException
{
String stupy_props = null;
[1] [2] 下一页
|