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

来源:互联网 发布:网络赌球会抓玩家吗 编辑:程序博客网 时间:2024/05/18 00:33

      首先用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。

DatabaseDialect PropertyDB2org.hibernate.dialect.DB2DialectHSQLDBorg.hibernate.dialect.HSQLDialectHypersonicSQLorg.hibernate.dialect.HSQLDialectInformixorg.hibernate.dialect.InformixDialectIngresorg.hibernate.dialect.IngresDialectInterbaseorg.hibernate.dialect.InterbaseDialectMicrosoft SQL Server 2000org.hibernate.dialect.SQLServerDialectMicrosoft SQL Server 2005org.hibernate.dialect.SQLServer2005DialectMicrosoft SQL Server 2008org.hibernate.dialect.SQLServer2008DialectMySQLorg.hibernate.dialect.MySQLDialectOracle (any version)org.hibernate.dialect.OracleDialectOracle 11gorg.hibernate.dialect.Oracle10gDialectOracle 10gorg.hibernate.dialect.Oracle10gDialectOracle 9iorg.hibernate.dialect.Oracle9iDialectPostgreSQLorg.hibernate.dialect.PostgreSQLDialectProgressorg.hibernate.dialect.ProgressDialectSAP DBorg.hibernate.dialect.SAPDBDialectSybaseorg.hibernate.dialect.SybaseDialectSybase Anywhereorg.hibernate.dialect.SybaseAnywhereDialect



参考资料:

1. http://msdn.microsoft.com/en-us/library/aa342325.aspx

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

原创粉丝点击