使用 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
}
从好的 ol' Java 做同样的事情也可以正常工作。所以我猜测问题应该存在于 Groovy SQL 对象内部的某个地方。
我注意到的最后一件事是这两个字符串(从结果集中获取字符串与将其嵌入到源代码)没有相同的编码。当我在里面打印 Hällo 时,eachRow
我进入H?llo
了 Windows 控制台,但是当我直接打印时,我得到H├νllo
了。