posts - 310, comments - 6939, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Spring連接MS SQL Server中出現(xiàn)的錯(cuò)誤

          Posted on 2008-01-29 09:16 詩特林 閱讀(9287) 評(píng)論(1)  編輯  收藏 所屬分類: J2EE


          采用Spring中配置Hibernate數(shù)據(jù)庫連接,但邊不上SQL Server2000,配置如下:

           <bean id="dataSource"
            class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName">
             <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
            </property>
            <property name="url">
             <value>
              jdbc:microsoft:sqlserver://cyc:1433;DatabaseName=officeArticle;SelectMethod=cursor
             </value>
            </property>
            <property name="username">
             <value>sa</value>
            </property>
            <property name="password">
             <value>sa</value>
            </property>
           </bean>


          ==============================================
          錯(cuò)誤如下:

          WARN - Could not obtain connection metadata
          org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory ([Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.)
           at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:855)
           at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
           at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
           at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:72)
           at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1463)
           at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1004)
           at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:825)
           at org.springframework.orm.hibernate3.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:751)
           at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1091)
           at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:396)
           at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
           at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
           at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
           at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
           at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
           at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
           at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
           at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
           at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3669)
           at org.apache.catalina.core.StandardContext.start(StandardContext.java:4104)
           at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
           at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
           at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
           at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:894)
           at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:857)
           at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:475)
           at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1102)
           at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
           at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
           at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1020)
           at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
           at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
           at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
           at org.apache.catalina.core.StandardService.start(StandardService.java:450)
           at org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
           at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
           at java.lang.reflect.Method.invoke(Unknown Source)
           at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
           at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
          Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
           at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
           at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
           at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
           at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source)
           at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
           at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
           at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
           at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
           at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:37)
           at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290)
           at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:877)
           at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:851)
           ... 41 more

          ==============================================

          解決辦法:

          首先查看數(shù)據(jù)庫服務(wù)器端口1433是否打開

          在命令提示符中輸入命令:netstat -an如果沒有tcp:0.0.0.0:1433說明1433端口沒打開,需要下載SQL Server2000的sp3或sp4補(bǔ)丁。
          我試了幾個(gè)補(bǔ)丁,最后成功的是SQL2000-KB884525-SP4-x86-CHS.EXE
          下載地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=8e2dfc8d-c20e-4446-99a9-b7f0213f8bc5&DisplayLang=zh-cn
          下載后執(zhí)行EXE文件,會(huì)出現(xiàn)安裝包SQL2KSP4,執(zhí)行setup.bat安裝程序。
          如果有掛起需要重啟計(jì)算機(jī)現(xiàn)象,請(qǐng)?jiān)谶\(yùn)行中輸入regedit打開注冊(cè)表編輯器,在HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Control\Session Manager中找到PendingFileRenameOperations項(xiàng)目,并刪除它,這樣就可以清除安裝暫掛項(xiàng)目。
          安裝成功后再執(zhí)行netstat -an有tcp:0.0.0.0:1433說明1433端口已打開。

          需要有msbase.jar、mssqlserver.jar、msutil.jar這三個(gè)jar包
          下載地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=9f1874b6-f8e1-4bd6-947c-0fc5bf05bf71&DisplayLang=en
          setup.exe文件。
          下載后執(zhí)行exe文件,這三個(gè)jar包將被默認(rèn)安裝在C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib文件夾下,這里只有這三個(gè)jar包是有用的,完全可以把它們放在其它位置,只要知道路徑即可。


          同時(shí):
             <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
          一定要寫在同一行,不然會(huì)報(bào)如下的錯(cuò)誤:

          org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.microsoft.jdbc.sqlserver.SQLServerDriver' for connect URL '
             jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=officeArticle;SelectMethod=cursor
             '
          org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.microsoft.jdbc.sqlserver.SQLServerDriver' for connect URL '
             jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=officeArticle;SelectMethod=cursor
             '
          org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'com.microsoft.jdbc.sqlserver.SQLServerDriver' for connect URL '
             jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=officeArticle;SelectMethod=cursor
             '
           at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:780)
           at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
           at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:112)
           at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
           at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:167)
           at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:207)
           at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:187)
           at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:127)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
           at java.lang.reflect.Method.invoke(Unknown Source)
           at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:707)
           at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:572)
           at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:737)
           at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:764)
           at org.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:753)
           at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1057)
           at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:857)
           at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:378)
           at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
           at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
           at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:283)
           at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
           at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
           at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
           at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
           at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
           at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3669)
           at org.apache.catalina.core.StandardContext.start(StandardContext.java:4104)
           at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
           at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
           at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
           at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:894)
           at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:857)
           at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:475)
           at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1102)
           at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
           at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
           at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1020)
           at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
           at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
           at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
           at org.apache.catalina.core.StandardService.start(StandardService.java:450)
           at org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
           at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
           at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
           at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
           at java.lang.reflect.Method.invoke(Unknown Source)
           at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
           at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
          Caused by: java.sql.SQLException: No suitable driver
           at java.sql.DriverManager.getDriver(Unknown Source)
           at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:773)
           ... 51 more

          評(píng)論

          # re: Spring連接MS SQL Server中出現(xiàn)的錯(cuò)誤  回復(fù)  更多評(píng)論   

          2008-01-29 09:35 by BeanSoft
          寒一個(gè) 這個(gè)和 Spring 沒任何關(guān)系,就是 SQL Server 沒啟用 TCP 支持。可以不下補(bǔ)丁也能解決。

          jdbc配置語句為: jdbc:microsoft:sqlserver://server_name:1433

          如運(yùn)行程序時(shí)出現(xiàn) "Error establishing socket" 錯(cuò)誤,則應(yīng)進(jìn)行如下調(diào)試:


          1 檢查SQL SERVER 是否允許遠(yuǎn)程訪問.具體步驟:

          1)打開"企業(yè)管理器",打開控制臺(tái)根目錄>SQL Server 組>數(shù)據(jù)庫
          2)在相應(yīng)"數(shù)據(jù)庫"上單擊右鍵,選擇"屬性"
          3)選擇"連接"選項(xiàng)卡,檢查"遠(yuǎn)程服務(wù)器連接"下,RPC服務(wù)是否選擇.

          2 使用telnet IP地址 1433,系統(tǒng)是否提示連接出錯(cuò),如系統(tǒng)提示出錯(cuò)
          檢查是否防火墻屏蔽了SQL SERVER 或 java IDE 的網(wǎng)絡(luò)訪問端口
          如果是,關(guān)閉防火墻,重新啟動(dòng)SQL SERVER和java IDE,進(jìn)行測試,
          如果系統(tǒng)仍提示上述錯(cuò)誤,嘗試下列步驟

          3 檢查SQL SERVER 端口號(hào)及是否啟用了TCP/IP協(xié)議,具體步驟:

          1)打開"企業(yè)管理器",打開控制臺(tái)根目錄>SQL Server 組>數(shù)據(jù)庫
          2)在相應(yīng)"數(shù)據(jù)庫"上單擊右鍵,選擇"屬性"
          3)選擇"常規(guī)"選項(xiàng)卡,點(diǎn)擊"網(wǎng)絡(luò)配置",如啟用的協(xié)議中無"TCP/IP協(xié)議"將其加入
          4)選擇"TCP/IP協(xié)議",點(diǎn)擊"屬性",檢查其端口號(hào)是否為1433
          5)如端口號(hào)為1433將其修改為其它端口號(hào),修改jdbc連接語句,將端口號(hào)同樣改為新啟用的端口號(hào),如jdbc:microsoft:sqlserver://server_name:1400(假設(shè)新端口號(hào)為 1400)

          以下的方法你每種的去試試:
          #檢查一下sql server的connection有沒有full.

          #如果是認(rèn)證的問題.
          可到sql enterprice manager->指定server->內(nèi)容->安全性.
          把驗(yàn)證改為 SQL server 及 windows.

          #點(diǎn)選屬性檢查一下port是否正確.

          #執(zhí)行%MSSQL_HOME%\80\Tools\Binn\SVRNETCN.exe
          把TCP/IP啟用.

          #關(guān)掉防火墻.

          #把SQL server update到sp3:
          http://www.microsoft.com/sql/downloads/2000/sp3.asp



          主站蜘蛛池模板: 舟曲县| 宣威市| 霍邱县| 六安市| 营口市| 贵阳市| 曲周县| 苏州市| 永城市| 民和| 铁岭县| 汉寿县| 丹江口市| 望谟县| 崇阳县| 荆门市| 阜阳市| 望都县| 乌鲁木齐市| 肇州县| 赤峰市| 永昌县| 通江县| 新沂市| 天祝| 石城县| 中超| 定陶县| 城市| 兴国县| 天门市| 贡觉县| 乳源| 霍邱县| 昭苏县| 宣武区| 红桥区| 容城县| 张家口市| 东宁县| 通化县|