簡體   English   中英

無法在JUnit中獲得JDBC連接

[英]Could not get JDBC connection in JUnit

我看過與該問題有關的其他帖子,但似乎無法理解和/或將其應用於解決該問題的代碼。 因此,您的幫助將非常有幫助。

這是錯誤堆棧跟蹤:

org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: Cannot load JDBC driver class 'com.ibm.db2.jcc.DB2Driver'
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:627)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:692)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:724)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:734)
at org.springframework.jdbc.core.JdbcTemplate.queryForRowSet(JdbcTemplate.java:899)
at com.cinfin.edocs.services.dao.FormMatrixDaoImpl.validateNonProductionStatusInMatrix(FormMatrixDaoImpl.java:857)
at com.cinfin.edocs.services.dao.FormMatrixDaoImplTest.testValidateNonProductionStatusInMatrix(FormMatrixDaoImplTest.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:72)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:81)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:216)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:82)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:60)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:67)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:162)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.sql.SQLException: Cannot load JDBC driver class 'com.ibm.db2.jcc.DB2Driver'
at org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2001)
at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1897)
at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1413)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
... 36 more
Caused by: java.lang.ClassNotFoundException: com.ibm.db2.jcc.DB2Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.apache.commons.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:1992)
... 40 more

我的FormMatrixDaoImpl類:

import javax.sql.DataSource;

@Repository
public class FormMatrixDaoImpl extends NamedParameterJdbcDaoSupport implements FormMatrixDao {

@Autowired  
public FormMatrixDaoImpl(@Qualifier("vitDataSource") DataSource dataSource, @Value("#{edocsQueryMap}") HashMap<String, String> edocsQueryMap) {
    super();

        @Override
    public SqlRowSet validateNonProductionStatusInMatrix(String projectId) throws SQLException {
        logger.info("validateNonProductionStatusInMatrix. projectId: "+projectId);

        SqlRowSet ret = getJdbcTemplate().queryForRowSet(qValidateNonProductionStatusInMatrix, new Object[] {projectId});

        return ret;
    }
}

我的FormMatrixDaoImplTest類:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:datasources.xml","classpath:edocservices.xml","classpath:edocservicesclients.xml", "/WEB-INF/edocservices-servlet.xml"})
@ActiveProfiles("local")

public class FormMatrixDaoImplTest {

@Autowired
private FormMatrixDaoImpl formMatrixDaoImpl;
public FormMatrixDaoImpl getFormMatrixDaoImpl() {
    return formMatrixDaoImpl;
}
public void setFormMatrixDaoImpl(FormMatrixDaoImpl formMatrixDaoImpl) {
    this.formMatrixDaoImpl = formMatrixDaoImpl;
}

@Test
public final void testValidateNonProductionStatusInMatrix() throws SQLException {
    SqlRowSet test = formMatrixDaoImpl.validateNonProductionStatusInMatrix("0b003e8880072976");
    assertEquals(test,null);
    }

我的datasources.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:util="http://www.springframework.org/schema/util" 
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd"> 

<beans profile="production,user,quality,development">         
    <bean id="vitDataSource" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
        <description>JNDI VITEDOC DB2 datasource</description>
        <property name="jndiName" value="${database.vitedoc.jndi}"/>        
    </bean>
    <bean id="docDataSource" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
        <description>JNDI DOCEDOC DB2 datasource</description>
        <property name="jndiName" value="${database.docedoc.jndi}"/>        
    </bean>

    <beans profile="local">     
    <bean id="vitDataSource" class="org.apache.commons.dbcp2.BasicDataSource" lazy-init="true" destroy-method="close">
        <description>Standalone VITEDOC datasource</description>
        <property name="driverClassName" value="${database.vitedoc.driver.classname}"/>
        <property name="url" value="${database.vitedoc.url}" />
        <property name="username" value="${database.vitedoc.username}"/>
        <property name="password" value="${database.vitedoc.password}"/>
    </bean>
    <bean id="docDataSource" class="org.apache.commons.dbcp2.BasicDataSource" lazy-init="true" destroy-method="close">
        <description>Standalone DOCEDOC datasource</description>
        <property name="driverClassName" value="${database.docedoc.driver.classname}"/>
        <property name="url" value="${database.docedoc.url}" />
        <property name="username" value="${database.docedoc.username}"/>
        <property name="password" value="${database.docedoc.password}"/>
    </bean>
</beans>

我的edocservices.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:ws="http://www.springframework.org/schema/web-services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:c="http://www.springframework.org/schema/c"    
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util" 
xmlns:jms="http://www.springframework.org/schema/jms"   
xsi:schemaLocation="http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services.xsd
                    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
                    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd                       
                    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd                      
                    http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.1.xsd">

上面的xml包含編組器,解組器,端點和wsdls。

這是我的edocservicesclient.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
xmlns:util="http://www.springframework.org/schema/util"     
xmlns:context="http://www.springframework.org/schema/context"   
xmlns:oxm="http://www.springframework.org/schema/oxm"       
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd       
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
    http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-4.1.xsd">

<context:property-placeholder location="classpath:edocservices.properties"/>
<context:component-scan base-package="com.cinfin.edocs.services"/>

上面的xml還具有其他一些編組器,解組器和saajmessagefactory。

這是我的edocservices-servlet.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:oxm="http://www.springframework.org/schema/oxm"
xmlns:mvc="http://www.springframework.org/schema/mvc"  xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"
xmlns:cache="http://www.springframework.org/schema/cache" xmlns:task="http://www.springframework.org/schema/task"               
xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd  
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-4.1.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd      
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd
    http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.1.xsd
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd">

<context:property-placeholder location="classpath:edocservices.properties"/>
<context:component-scan base-package="com.cinfin.edocs.services"/>  
<context:annotation-config/>

當我將FormMatrixDaoImplTest類作為JUnit測試運行時,出現無法獲取jdbc連接的錯誤。 該錯誤僅與JUnit測試相關,並且在程序本地運行時不會出現。 因此,我感覺我可能會缺少JUnit設置之類的東西。

任何幫助指出代碼中的錯誤/錯誤和/或指向其他方式來測試運行“選擇”命令以從數據庫檢索數據的幫助將受到高度贊賞。

先感謝您。

錯誤無法加載JDBC驅動程序類com.ibm.db2.jcc.DB2Driver指出,包含類的jar在運行時類路徑中不可用。 確保包含類的罐子可用。

參考: 如何使用Eclipse設置運行時類路徑

1)從我上面的筆記中:

聽起來您可能正在WebSphere上使用Spring。 日志中的核心錯誤是Cannot load JDBC driver class com.ibm.db2.jcc.DB2Driver

幾點建議:

  1. 跟蹤您的JNDI定義(例如vitDataSource )定義其驅動程序類名的位置(例如database.vitedoc.driver.classname

2)確保此DB2Driver在您的WebSphere Admin控制台中作為JDBC資源可用...和/或...

3)確保在pom.xml中配置了DB2驅動程序.jar(如果使用的是Maven)。

2)您已經確認:

“ ...類名定義為:database.vitedoc.driver.classname = com.ibm.db2.jcc.DB2Driver”

<=好!

3)現在,您需要做的是:

a)確保您具有有效的db2jcc.jar:

http://www-01.ibm.com/support/docview.wss?uid=swg21363866

b)確保.jar位於類路徑中

如果您正在運行WebSphere,那么我的首選是在WebSphere Admin控制台中執行以下操作:

http://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/tdat_ccrtpds.html?cp=SSAW57_8.5.5%2F1-3-0-23- 3-0-7-2

如果這是一個簡單的Web應用程序,則可以將其添加到Eclipse項目的\\ lib文件夾中:

http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.wst.webtools.doc.user%2Ftopics%2Fccwebprj.html

這是將第三方庫添加到Eclipse中的方法。

  1. 打開eclipse轉到Package Explorer。
  2. 右鍵單擊您的項目,然后選擇項目屬性。
  3. 單擊彈出窗口左側欄中的Java Build path。
  4. 選擇庫選項卡。
  5. 選擇“添加外部Jar文件”,然后使用瀏覽器導航到您的JAR文件,然后依次選擇“打開”和“確定”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM