尝试使用JDBC编写一些基本的PostgreSQL代码,最终集成到用Groovy编写的应用程序中。我编写了这个Groovy代码来连接数据库然后执行语句;但是,我收到了一个错误,我试图找到解决方案,但不能。以下是Groovy代码的相关部分,以及关于错误发生位置的注释:
base("myDbContext")
控制台日志说:
Sql Instance: groovy.sql.Sql@5aa9e4eb The row Id is: 1 Caught: groovy.lang.MissingMethodException: No signature of method: java.lang.String.positive() is applicable for argument types: () values: [] Possible solutions: notify(), tokenize(), size(), size() groovy.lang.MissingMethodException: No signature of method: java.lang.String.positive() is applicable for argument types: () values: [] Possible solutions: notify(), tokenize(), size(), size() at DatabaseTest$_run_closure1.doCall(DatabaseTest.groovy:34) at DatabaseTest.run(DatabaseTest.groovy:31) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) Process finished with exit code 1
知道我做错了吗?
答案 0 :(得分:18)
另一个答案为您提供了我也建议的解决方案,但仍然可以通过原因来了解原因。
Groovy过度使用运算符重载。这意味着如果您要编写自己的类,可以重载+
运算符以执行许多操作。
但是,在行的末尾和行的开头使用+
之间存在差异。
在一行结束时,+
被视为二元运算符 a + b
表示追加,但是在行的开头,它被视为一元运算符 positive
(将“+ 6”视为“正六”)。
如果你要写这个,它会更好:
println "The row Id is: ${row.id}" +
"The word is: ${row.word}" +
"The number is: ${row.number}" +
"The decimal is: ${row.decimal}" +
"The date-time is: ${row.datetime}"
但是,如果你这样做,你会得到一行的输出,那是因为你没有添加换行符,\n
println "The row Id is: ${row.id}\n" +
"The word is: ${row.word}\n" +
"The number is: ${row.number}\n" +
"The decimal is: ${row.decimal}\n" +
"The date-time is: ${row.datetime}"
现在事情开始变得更加丑陋,这就是为什么Groovy的多行字符串功能可以派上用场,如另一个答案所示。
答案 1 :(得分:10)
不要使用可怕的字符串连接!在Groovy中有一个很好的替代品:
println """The row Id is: ${row.id}
The word is: ${row.word}
The number is: ${row.number}
The decimal is: ${row.decimal}
The date-time is: ${row.datetime}"""