2017-07-05 81 views
0

在Grails 3中獲取數據庫連接的正確方法是什麼?如何在grails 3中獲取數據庫連接3

Grails的2下面的代碼有作品:

((SessionImpl) sessionFactory.getCurrentSession()).connection() // sessionFactory initialized in bootstrap 

但經過遷移到Grails的3有時候我在日誌中看到異常:

值java.sql.SQLException:ResultSet中後不允許操作在 com.mysql.jdbc.SQLError.createSQLException在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)收報 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)(的SQLError .java:885)在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)在 com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:743)在 com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java :1037)維持在 com.mchange.v2.c3p0.impl.NewProxyResultSet.getLong(NewProxyResultSet.java:424) com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2757)在java_sql_ResultSet $ getLong $ 3調用(來源不明)

它發生的請求的0.01%

  • Grails的3.2.11
  • 格姆6.0.12

回答

1

我想這取決於在你需要它,但你可以注入一個DataSource到服務。

javax.sql.DataSource dataSource 

然後,你可以使用

dataSource.getConnection() 

另外要注意的變化格姆6(http://gorm.grails.org/6.0.x/hibernate/manual/ 1.2.1節)沖洗模式。如果上游保存/提交失敗,那麼您的結果集可能會偶然關閉,並觸發一個看起來像這樣的錯誤,而根本就沒有任何與該特定代碼行有關的任何內容。我會(暫時)回到舊的沖洗模式,看看問題是否消失,然後再跟蹤更多!

0

從grails docs,你可以得到實際的dataSource bean。從您可以訪問連接,或者用它來查詢數據庫

 

    import groovy.sql.Sql 

    def dataSource 

    println "connection: ${dataSource.connection}" 

    Sql sql = new Sql(dataSource) 
    sql.eachRow("SELECT * FROM note") { row -> 
     println "row: ${row}" 
    } 

使用「dataSourceUnproxied」,以避免Hibernate事務和會議有關的問題:

 

    def dataSourceUnproxied