我在Grails应用程序中使用spring bean与SQL进行交互。我的resources.groovy
文件如下所示:
beans = {
groovySql(groovy.sql.Sql, ref('dataSource')) {}
}
我的DataSource.groovy
文件已设置数据源(并命名为dataSource
)。
我 使用的JDBC连接字符串看起来像这样:
jdbc:mysql://my.domain.com/Schema_Number_One
当我这样做时,一切正常。但是,我现在需要使用的不仅仅是该服务器上的一个架构。所以我将连接字符串改为:
jdbc:mysql://my.domain.com/
我认为这样会很好,我可以发出像USE Schema_Number_Two
这样的查询来切换。但是出了点问题。
当我尝试运行此代码时:
def query = "USE Schema_Number_Two"
groovySql.execute(query)
groovySql.commit()
我在控制台中收到以下错误:
连接是只读的。不允许导致数据修改的查询。
所以......显然它将USE
语句视为写入查询?我的下一个想法是试图通过这样做来欺骗它认为这是一个只读语句:
def query = "USE Schema_Number_Two; SELECT 1"
groovySql.execute(query)
groovySql.commit()
虽然该查询确实执行没有错误,但它并不坚持。下一个查询返回了一条错误消息,指出没有指定数据库。
我还尝试在我在控制器中调用此方法之前添加@Transactional(readOnly=false)
,但这似乎没有任何影响。我可以确认我正在使用Grails Transactional注释。
答案 0 :(得分:1)
据我所知,没有办法完成我在这里尝试做的事情。我最不得不做的只是定义单独的数据源。