最新ssh框架连接sql server 2008数据库的一些列问题

      首先用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下载地址:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774

      

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

      异常一: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("http://localhost/etc/passwd"))则不能运行。因此,我们不能始终认为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. http://msdn.microsoft.com/en-us/library/aa342325.aspx

2. http://www.tutorialspoint.com/hibernate/hibernate_configuration.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值