`
yingwuhahahaha
  • 浏览: 17626 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

初步比较三种MSSQL JDBC驱动的不同(转!)

 
阅读更多

转自:http://publishblog.blogdriver.com/blog/tb.b?diaryID=258124
初步比较三种MSSQL JDBC驱动的不同- -



现在我们所用的O/R Mapping主要是针对SQL Server和微软提供的JDBC驱动,因为开发的时候都是用微软的JDBC驱动测试的,一直使用下来也很正常。虽然网上流传微软的JDBC驱动性能很差,但是这上面的性能差异目前还未构成我们系统的瓶颈;况且我们也试过不同的JDBC驱动,如jTDS、jsqlconnect,但是采用这些驱动后都通不过我们现有系统的测试,最主要的问题在于不能返回生成的主键。

今天我简单的比对了一下MS Driver、JSQL Driver、jTDS Driver三种驱动的性能,后两种相差不大,但微软的JDBC驱动和这两者的确存在着较大差距,想想现在系统的数据量也增长了不少,如果可以稍微调整一下程序优化一部分性能,成本还是可以接受的。

上面三种驱动都是不支持JDBC 3.0的驱动,因此无法用getGeneratedKeys方法返回生成的主键。原来在用MS Driver写的时候,是采用select @@identity的方式返回生成的主键的(其实按理应用select SCOPE_IDENTITY()返回主键,但是在事务未提交之前,MS驱动不支持PreparedStatement用该方法查询回主键),采用JSQL和jTDS的驱动,用该方法返回均为空。换成select SCOPE_IDENTITY(),三种驱动都不能正常工作。
public String getIdentity() {
return "select @@identity";
//按理应用SCOPE_IDENTITY(),但是目前SQL
// JDBC驱动不支持PreparedStatement用该方法返回主键
}

因为简单的研究过一下Hibernate,在Hibernate的配置文件中,对MS Driver是not recommended,jTDS Driver是not supported,而支持JSQL Driver。稍微看了一下它的源码,对于SQL Server的Dialect,它是采用“insertsql + select SCOPE_IDENTITY()”的sql,然后通过executeQuery方式返回主键。
public String appendIdentitySelectToInsert(String insertSQL) {
return insertSQL + " select SCOPE_IDENTITY()";
}
我采用Hibernate的方式试了一下,对于MS和JSQL来说都能正常返回,对于jTDS来说,还是返回不了,抛出返回值不是游标的异常。看来要兼容各种数据库和驱动还真是让人头痛的一件事情,……

最后我调整了一下方法,不是采用executeQuery方式返回主键,而是先execute,然后通过getMoreResults来判断是否拿到主键,再通过getResultSet方法拿到生成的主键,在三种驱动上都测试通过。

总结一下:

 MS Driver jTDS Driver JSQL Driver 
事务内先insert,再通过select @@identity返回主键(分两次执行)支持 不支持 不支持 
事务内先insert,再通过select SCOPE_IDENTITY()返回主键(分两次执行)不支持 不支持不支持 
事务内通过insertsql + select SCOPE_IDENTITY(),用executeQuery返回主键(一次执行)支持 不支持 支持 
事务内通过insertsql + select SCOPE_IDENTITY(),用execute,再根据getMoreResults和getResultSet返回主键(一次执行)支持 支持 支持 


自己写的库比用开源的库好的一点就是可以控制整个框架,能根据实际需要做调整。Hibernate对MS Driver和jTDS的评价也是基于其自己的实现来的,这次简单的比较仅仅是比较返回主键上的不同,没有针对其他的数据库和数据库驱动做测试,采用第四种方式是否比第三种方式具有更大的兼容性还有待进一步测试。


- 作者: crmky 2004年07月26日, 星期一 22:19

 

分享到:
评论

相关推荐

    MSSQL-jdbc驱动

    MSSQL-jdbc驱动属于Type 4,这是一种纯Java实现的驱动,无需依赖于数据库供应商提供的本地库。这意味着它可以在任何支持Java的平台上运行,提供跨平台的数据库连接能力。 **连接步骤** 1. **添加驱动**: 首先,...

    JDBC 驱动包各种, 包括MSSQL2012 驱动包

    在提供的压缩包中,包含了一系列不同数据库系统的JDBC驱动,适用于多种版本的数据库管理系统(DBMS)。让我们详细了解一下这些驱动包以及它们所对应的数据库系统: 1. **MSSQL 驱动包**: - MSSQL 2005:这是微软...

    JDBC MSSQL2008 驱动

    JDBC驱动分为四种类型:Type 1、Type 2、Type 3和Type 4。微软的JDBC驱动属于Type 4,它是纯Java实现,无需中间层软件,直接与数据库服务器通信,提供了更好的性能和可移植性。 4. **连接数据库** 要使用JDBC ...

    MS SQL Server各版本JDBC驱动包

    最新版本SQL Server JDBC驱动包,还包括老版本驱动包: mssql-jdbc-8.2.1.jre8(支持SQL Server 2012/2014/2016/2017/2019) mssql-jdbc-7.2.2.jre8(支持SQL Server 2008R2/2012/2014/2016/2017) mssql-jdbc-6.2.2....

    jdbc mssql驱动包

    标题中的“jdbc mssql驱动包”指的是用于Java应用程序连接Microsoft SQL Server 2000数据库的JDBC驱动程序。JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一组标准API。MSSQL...

    MSSQL JDBC 资源包

    在Java中,有四种类型的JDBC驱动,分别是:Type 1(JDBC-ODBC桥接驱动)、Type 2(部分Java驱动)、Type 3(纯Java网络协议驱动)和Type 4(完全Java驱动)。对于SQL Server 2008,推荐使用Type 4驱动,如Microsoft...

    mysql ,mssql jdbc jar包

    JDBC提供了一种标准的接口,使得Java程序能够通过驱动程序与各种数据库进行通信。本文将详细介绍如何使用JDBC与MySQL和MSSQL进行连接,以及涉及到的相关jar包。 首先,我们需要理解JDBC驱动程序。JDBC驱动程序是...

    SQL Server_JDBC驱动【mssql-jdbc-6.4.0.jre8.jar】.rar

    本文将详细讲解SQL Server JDBC驱动及其使用方法,以及如何利用`mssql-jdbc-6.4.0.jre8.jar`这个驱动文件进行数据库连接。 SQL Server JDBC驱动是由Microsoft提供的,允许Java应用程序通过Java API与SQL Server...

    微软开源的JDBC 驱动 MSSQL-JDBC.zip

    用于 SQL Server 的 Microsoft JDBC 驱动程序是 Type 4 JDBC 驱动程序,通过 Java 平台企业版中提供的标准 JDBC 应用程序接口(API)提供数据库连接。 驱动程序提供从任何 Java 应用程序、应用程序服务器或启用 Java...

    mssql 2000 数据库jdbc驱动

    标题中的“mssql 2000 数据库jdbc驱动”指的是用于Java应用程序连接Microsoft SQL Server 2000数据库的Java Database Connectivity (JDBC)驱动程序。JDBC是Java平台的标准接口,允许Java代码与各种数据库进行交互。...

    JDBC +MSSQL驱动

    MSSQL驱动是JDBC驱动的一种,专为连接到Microsoft SQL Server设计。 1. **JDBC基本概念** - JDBC API 包含了`java.sql`和`javax.sql`包中的接口和类,如`Connection`、`Statement`、`PreparedStatement`、`...

    ms sql 驱动包(sqljdbc.jar 和jtds.jar)

    标题中提到的"ms sql 驱动包(sqljdbc.jar 和jtds.jar)"是指两种不同的Java数据库连接器(JDBC)驱动,它们用于在Java应用中与SQL Server进行通信。这两个驱动包分别是: 1. **sqljdbc.jar**:这是Microsoft官方...

    SQLSERVER官方驱动 jtds-1.3.1 mssql-jdbc-7.0.0.jre8 sqljdbc42

    总的来说,SQL Server官方驱动如jtds、mssql-jdbc和sqljdbc42为Java开发者提供了与SQL Server数据库交互的桥梁,它们各有优缺点,适用于不同的项目需求。正确选择和使用这些驱动,可以确保Java应用程序能够高效、...

    DBeaver连接MSSQL驱动

    常见的MSSQL驱动有jTDS和Microsoft JDBC Driver for SQL Server两种,它们都遵循JDBC规范,但实现细节略有不同。 二、DBeaver中配置MSSQL驱动 1. 安装驱动:首先,你需要下载MSSQL的JDBC驱动包,如“mssql-drivers...

    mssql-jdbc-8.2.0.jre8-API文档-中文版.zip

    赠送jar包:mssql-jdbc-8.2.0.jre8.jar; 赠送原API文档:mssql-jdbc-8.2.0.jre8-javadoc.jar; 赠送源代码:mssql-jdbc-8.2.0.jre8-sources.jar; 赠送Maven依赖信息文件:mssql-jdbc-8.2.0.jre8.pom; 包含翻译后...

    MSSQL2000与MSSQL2005 JDBC URL的区别

    综上所述,MSSQL2000与MSSQL2005在JDBC URL上的主要区别在于驱动程序名称的不同以及URL前缀的变化。这些细节上的差异可能会影响到Java应用程序与数据库之间的连接方式,因此在进行开发时需格外留意。

    MS SqlServer JDBC驱动下载

    博文链接:https://dayone.iteye.com/blog/195546

    sqljdbc和sqljdbc4 sqlserver最新驱动

    SQLJDBC和SQLJDBC4是Microsoft为Java应用程序提供的用于连接SQL Server数据库的驱动程序。这两个版本都是JDBC(Java Database Connectivity)驱动,允许Java开发者在应用程序中与SQL Server进行交互。下面将详细介绍...

    mssql_jdbc.rar_mssql jd_mssql jdbc_mssql jd_mssql jdbc_mssql2

    标题中的“mssql_jdbc.rar”暗示了这是一个与Microsoft SQL Server数据库连接相关的Java驱动程序,主要涉及的是JDBC(Java Database Connectivity)技术。在描述中提到的“sql server 2000 纯java驱动”表明这个驱动...

    mssqlserver2008的JDBC驱动包 for linux

    标题中的“mssqlserver2008的JDBC驱动包 for linux”指的是针对Microsoft SQL Server 2008的Java数据库连接(JDBC)驱动程序,适用于Linux操作系统。这个驱动包使得Java应用程序能够通过JDBC API与SQL Server 2008...

Global site tag (gtag.js) - Google Analytics