注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
防止SYN泛洪攻击 开启路由器的TC
DNS (domain Name System) 系统的
WebAdmin运行在IIS6下的设定方法
用rsync对邮件服务器进行远程备份
在FreeBSD环境下使用Sybase 11.0
UNIX Sybase安装说明
Sybase系统维护经验谈
AIX下sybase的安装
SYBASE参数设置
SYBASE数据库用户管理基本概念
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> Java >> 文章正文
Sybase JDBC驱动的改进
作者:佚名  来源:不详  点击:  更新:2006-12-19
简介:
 

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] 下一页






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务