使用Groovy连接到Oracle时,我遇到了一个奇怪的问题。 我创建了以下测试表:
CREATE TABLE t (text VARCHAR2 (256));
INSERT INTO t VALUES ('[Hallo][Hällo][Hello][Hi]');
我想找到括在方括号中的所有子串。以下Groovy代码无法找到第二个([Hällo]):
import groovy.sql.Sql
sql = Sql.newInstance('jdbc:oracle:thin:@server:1521:ORCL', 'user',
'password', 'oracle.jdbc.OracleDriver');
sql.eachRow("select text from t") { row ->
row.text.eachMatch(/\[[A-Za-zä\-]+\]/) { match ->
println match
}
}
直接使用字符串按预期工作:
'[Hallo][Hällo][Hello][Hi]'.eachMatch(/\[[A-Za-zä\-]+\]/) { match ->
println match
}
从好的'Java也可以做同样的事情。所以我猜这个问题应该存在于Groovy SQL对象的某个地方。
我注意到的最后一件事是两个字符串(从结果集中获取字符串并将其嵌入到源代码中)没有相同的编码。当我在eachRow
内打印Hällo时,我在Windows控制台中得到H?llo
,但是当我直接打印它时,我得到H├νllo
。
答案 0 :(得分:3)
经过进一步的实验,问题似乎是Groovy使用默认的平台编码读取我的脚本。如果我将-c UTF8
传递给Groovy解释器,那么我会得到预期的结果。