标签: groovy-sql

在Groovy中保存或更新

通常在Java中我执行SELECT语句并检查ResultSet的大小.如果它为零,我发出INSERT,否则发出UPDATE.

既然Groovy在JDBC之上提供了语法糖,我想知道它是否提供了一种方法来简化这个过程?有更简单的方法来保存或更新记录吗?

注意:我知道Hibernate提供了这个,但我宁愿只使用Groovy API.

groovy groovy-sql

6
推荐指数
1
解决办法
536
查看次数

Spock 中的运行时异常模拟 groovy.sql

我已经在 StackOverflow 和 Google 上搜索了一段时间,试图找到能够在 Spock 规范中运行此代码的正确配置/语法:

Sql mockSql = Mock()
Run Code Online (Sandbox Code Playgroud)

但是,当我运行单元测试时,CGLIB 向我抛出了一个令人讨厌的异常:

java.lang.IllegalAccessError: tried to access method groovy.sql.Sql.<init>()V from class groovy.sql.Sql$$EnhancerByCGLIB$$d0b7cd7f
at org.spockframework.mock.runtime.MockInstantiator.instantiate(MockInstantiator.java:33)
at org.spockframework.mock.runtime.ProxyBasedMockFactory$CglibMockFactory.createMock(ProxyBasedMockFactory.java:92)
at org.spockframework.mock.runtime.ProxyBasedMockFactory.create(ProxyBasedMockFactory.java:49)
at org.spockframework.mock.runtime.JavaMockFactory.create(JavaMockFactory.java:51)
at org.spockframework.mock.runtime.CompositeMockFactory.create(CompositeMockFactory.java:44)
at org.spockframework.lang.SpecInternals.createMock(SpecInternals.java:47)
at org.spockframework.lang.SpecInternals.createMockImpl(SpecInternals.java:282)
at org.spockframework.lang.SpecInternals.MockImpl(SpecInternals.java:83)
Run Code Online (Sandbox Code Playgroud)

我看了这个问题/答案 -用 GroovyMock 或 Spock 中的类似方法模拟静态方法- 希望它可以给我一个很好的起点,但在我的例子中被嘲笑的类,groovy.Sql 是一个 groovy 类,所以我不是确定这是正确的起点。

我已经使用 GroovyMock 在其他单元测试中成功地测试了 Groovy.Sql,但我希望我可能只是错过了一些可以使它成功的东西,这样我就可以让 Spock 魔术和 Groovy SQL 一起快乐起来。如果我只是在某处错过了答案,我深表歉意 - 希望我不会重复其他人的询问。

groovy unit-testing spock groovy-sql

4
推荐指数
1
解决办法
1770
查看次数

你怎么知道什么时候GroovyStrings不像字符串那样对待?

在尝试修改MySQL数据库时,我在Groovy中遇到了一个令人困惑的问题.看似相同的代码抛出异常,除非我GroovyString明确转换为java.lang.String:

import groovy.sql.Sql
def sql = Sql.newInstance('jdbc:mysql://localhost/test?useUnicode=yes&characterEncoding=UTF-8', 'user', 'pass', 'com.mysql.jdbc.Driver')
def tableName = 'my_table'
sql.execute "truncate $tableName"
Run Code Online (Sandbox Code Playgroud)

抛出:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''my_table'' at line 1
Run Code Online (Sandbox Code Playgroud)

以下工作没有问题:

sql.execute "truncate $tableName".toString()
Run Code Online (Sandbox Code Playgroud)

这是令人惊讶的.我是否应该预料到这个问题,如果是这样,在什么情况下GroovyStringString实例可能会有不同的对待?

mysql groovy mysql-connector groovy-sql

2
推荐指数
1
解决办法
136
查看次数