Chinaunix首页 | 论坛 | 博客
  • 博客访问: 404705
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1712
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-09 10:51
文章分类

全部博文(22)

文章存档

2016年(3)

2015年(6)

2014年(1)

2013年(12)

我的朋友

分类: SQLServer

2013-09-09 17:15:59

    首先用jdbc连接数据库sql server 2000与sql server 2005/2008就有很大的不同。以前连接sql server 2000时需要用到至少三个包,包括mssqlserver.jar/msbase.jar/msutil.jar。但是到了sql server 2005/2008就方便很多,只需要一个包就可以搞定,sqljdbc.jar或者sqljdbc4.jar。具体的可以看看microsoft的官网上对jdbc驱动的说法。这两个包的选择也很多特点,如果项目必须在JDK 1.6 上运行,即使该应用程序不使用 JDBC 4.0 功能,也应使用 sqljdbc4.jar。

      jdbc 4.0 for sql server下载地址:

      

      在完成搭建项目框架的过程中,也遇到过很多问题。

      异常一:java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver

      这是由于更换了jdbc的jar包,新的jar中没有com.microsoft.jdbc.sqlserver.SQLServerDriver,所以必须换成sql server 2008相应的dviver。之前使用的SQL Server 2000 JDBC driver是:"com.microsoft.jdbc.sqlserver.SQLServerDriver",而SQL Server 2005 and 2008 JDBC driver必须使用:"com.microsoft.sqlserver.jdbc.SQLServerDriver"。同时,URL前缀也有相应的改变,SQL Server 2000之前使用"jdbc:microsoft:sqlserver://",SQL Server 2005 and 2008使用“jdbc:sqlserver://"。而且自Microsoft SQL Server JDBC Driver 1.2后支持使用数据库实例名进行连接,如:jdbc:sqlserver://[serverName[/instanceName][:portNumber]][;property=value[;property=value]]。

    综上所述,使用jdbc连接sql server 2005和2008,必须做一下处理:

    Driver更换成:com.microsoft.sqlserver.jdbc.SQLServerDriver

       url前缀更换成:jdbc:sqlserver://


       异常二:此驱动程序不支持 Java Runtime Environment (JRE) 1.7 版。请使用支持 JDBC 4.0 的 sqljdbc4.jar 类库。

       这个花费了我很多时间去尝试,第一次遇到是使用tomcat服务器,修正之后又换成jboss服务器,也就是第二次,这两次都遇到了这个问题。当第一次遇到这个问题之后,我上网查了很多资料,我也照着这些资料上的处理方法处理了,但是没有比较好的效果。首先是因为使用jdbc连接sql server 2008,必须换用新的jar包,所以在microsoft的官网上下载了jdbc 4.0 for sql server。在下载下来的压缩包中,可以找到sqljdbc.jar或者sqljdbc4.jar,我先将这两个jar包都放在了项目的classpath中,运行出现这个异常。根据资料的说明,将sqljdbc.jar从classpath中删除,但是异常依然存在。然后又按照资料的说法将sqljdbc4.jar放到了jdk目录中,目录路径为jdk/jre/lib/ext,这次使用tomcat发布应用,应用成功的运行了。但是我将项目发给同事,让他试试,结果他将jar包放到classpath中就可以了,不必将jar包放到jdk中。

       第二次出现此异常,上述运行成功的项目应用使用jboss来发布,结果又出现了此异常。这次我将jar包放入jboss的lib中,依旧有此异常。之后我查看发布到jboss中的项目,发现在项目的WEB-INF/lib中存在sqljdbc.jar,应该是之前将此jar包从classpath中删除,但是没有从lib包中删除,所以再次将sqljdbc.jar从lib文件目录中删除,再次运行项目,项目可以成功运行。不用将jar包放入tomcat和jboss的目录中,也不用放入jdk目录中,也跟jar的顺序无关。


       异常三:java.lang.IllegalArgumentException: URI scheme is not “file”?

       这个异常是由这两句代码引起的。

       URL url = QueryParser.class.getResource(Querys.QUERY_FILE_PATH);

       InputStream in = new FileInputStream(new File(url.toURI()));   可以理解为对于使用getgetResource方法获得文件url,两种服务器对url的前缀做出了不同的处理

       url的前缀模式不止一种,比如file//和http://。对于new File(url.toURI())这条语句,url的前缀必须是file//,所以对于语句new File(new URI("file:///etc/passwd"))能运行,而对于语句new File(new URI(""))则不能运行。因此,我们不能始终认为url的前缀是file//,对于new File(url.toURI())的运用也要特别注意。如果使用InputStream is = url.openStream();就不会出现异常。


附录:

配置hibernatge方言(Hibernate Dialect

       参考hibernate官网上的配置,可以看到一些列数据库以及其相应的方言,sql server 2008的hibernate方言是org.hibernate.dialect.SQLServer2008Dialect。

Database Dialect Property
DB2 org.hibernate.dialect.DB2Dialect
HSQLDB org.hibernate.dialect.HSQLDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Informix org.hibernate.dialect.InformixDialect
Ingres org.hibernate.dialect.IngresDialect
Interbase org.hibernate.dialect.InterbaseDialect
Microsoft SQL Server 2000 org.hibernate.dialect.SQLServerDialect
Microsoft SQL Server 2005 org.hibernate.dialect.SQLServer2005Dialect
Microsoft SQL Server 2008 org.hibernate.dialect.SQLServer2008Dialect
MySQL org.hibernate.dialect.MySQLDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 11g org.hibernate.dialect.Oracle10gDialect
Oracle 10g org.hibernate.dialect.Oracle10gDialect
Oracle 9i org.hibernate.dialect.Oracle9iDialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
Progress org.hibernate.dialect.ProgressDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect




参考资料:

1. 

2. 

阅读(5740) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~