2015-05-18 40 views
0

我想在我的應用程序和Oracle數據庫之間建立連接。我沒有下列數據庫信息:配置mybatis使用現有連接

  1. URL
  2. 用戶名
  3. 密碼

我可以檢索是有效java.sql.Connection通過使用黑板所提供的API。

在這種情況下可以設置mybatis嗎?

我使用的配置如下圖所示:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration> 

    <settings> 
     <setting name="useGeneratedKeys" value="true"/> 
     <setting name="jdbcTypeForNull" value="NULL"/> 
    </settings> 

    <typeAliases> 
     <typeAlias alias="assignment" type="simpleproj.assignment.model.Assignment"/> 
     <typeAlias alias="assignmentLog" type="simpleproj.assignment.model.AssignmentLog"/> 
    </typeAliases> 

    <mappers> 
     <mapper resource="simpleproj/assignment/model/Assignment.xml" /> 
    </mappers> 

</configuration> 

這是我得到一個新的SqlSessionFactory實例:

String resource = "mybatis-config.xml"; 
Reader reader = Resources.getResourceAsReader(resource); 
return new SqlSessionFactoryBuilder().build(reader, "assignment"); 

之後,我試圖通過這個代碼來檢索會話:

session = sqlSessionFactory.openSession(connection); 

我檢查過connection有效w第i:

  1. connection.isValid(3);,它返回真
  2. 一個PreparedStatement可以成功執行

然而,sqlSessionFactory.openSession(connection)與以下堆棧跟蹤生成錯誤:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error opening session. Cause: java.lang.reflect.UndeclaredThrowableException 
### Cause: java.lang.reflect.UndeclaredThrowableException 
     at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23) 
     at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromConnection(DefaultSqlSessionFactory.java:102) 
     at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession(DefaultSqlSessionFactory.java:67) 
     at simpleproj.assignment.dao.DatabaseDAO.getSession(DatabaseDAO.java:55) 
     at simpleproj.assignment.dao.DatabaseDAO.deleteAssignmentList(DatabaseDAO.java:124) 
     at simpleproj.assignment.AssignmentLoader.importData(AssignmentLoader.java:85) 
     at simpleproj.assignment.AssignmentLoader.main(AssignmentLoader.java:49) 
Caused by: java.lang.reflect.UndeclaredThrowableException 
     at $Proxy7.getAutoCommit(Unknown Source) 
     at org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromConnection(DefaultSqlSessionFactory.java:99) 
     ... 5 more 
Caused by: java.lang.reflect.InvocationTargetException 
     at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at blackboard.db.ConnectionManager$ConnectionProxy.invoke(ConnectionManager.java:1419) 
     ... 7 more 
Caused by: java.sql.SQLException: Connection [email protected] is closed. 
     at org.apache.commons.dbcp.DelegatingConnection.checkOpen(DelegatingConnection.java:398) 
     at org.apache.commons.dbcp.DelegatingConnection.getAutoCommit(DelegatingConnection.java:337) 
     ... 11 more 

回答

0

從這個錯誤: [email protected]已關閉。 當您將它傳遞給sqlSessionFactoryBean時,此連接關閉。 您可以調用connection.getAutoCommit()來測試連接是否支持事務。

+0

使用'connection.getAutoCommit()'進行測試,但此行引發同樣的異常'由$ Proxy7.getAutoCommit(Unknown Source)引發的java.lang.reflect.UndeclaredThrowableException'。 –