grails - 如何在grails 3中获取数据库连接

标签 grails grails-orm

在 Grails 3 中获取数据库连接的正确方法是什么?

对于 grails 2,以下代码有效:

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

但是迁移到 Grails 3 后有时我会在日志中看到异常:

java.sql.SQLException: Operation not allowed after ResultSet closed at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:743) at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1037) at com.mysql.jdbc.ResultSetImpl.getLong(ResultSetImpl.java:2757) at com.mchange.v2.c3p0.impl.NewProxyResultSet.getLong(NewProxyResultSet.java:424) at java_sql_ResultSet$getLong$3.call(Unknown Source)

0.01% 的请求会发生这种情况

  • Grails 3.2.11
  • Gorm 6.0.12

最佳答案

我想这取决于您需要它的地方,但您可以将数据源注入(inject)到服务中。

javax.sql.DataSource dataSource

然后你就可以使用

dataSource.getConnection()

另请注意 GORM 6 中刷新模式的更改(http://gorm.grails.org/6.0.x/hibernate/manual/ 第 1.2.1 节)。如果上游保存/提交失败,您的结果集可能会意外关闭并触发如下所示的错误,而实际上与该特定代码行根本没有任何关系。我会(非常暂时地)设置回旧的冲洗模式,看看问题是否消失,然后再进行更多跟踪!

关于grails - 如何在grails 3中获取数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44934100/

相关文章:

Grails + GORM : What is the default equals() implementation in GORM?

grails - 按外键列对 GORM 查询结果进行排序

Grails 查询不使用 GORM

tomcat - 使用 grails flash 对象和负载平衡

grails - 如何在Grails中将两个查询结果合并到 map 中?

grails - Grails无法渲染备用 View

具有不同持久性范围的 grails 服务

grails - 如何声明插件依赖关系

升级到 2.3.5 后不再调用 BootStrap 中添加的 Grails 事件方法

mysql - 如何让MySQL在grails 2.0上运行