gpt4 book ai didi

java - 比较 JDBC 结果集的文本输出时出错

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:50 25 4
gpt4 key购买 nike

我正在尝试对从两个 Oracle 数据库返回的字符串列表进行逐字比较。

我尝试使用此库比较文本 ( java-diff-utils )。

在比较文本输出时,我遇到了不一致的结果。 There is a longer description here我提出的一个问题,但这些错误似乎可能是数据库上数据编码的结果。

我尝试删除特殊字符或修剪空格,但它似乎不会影响比较结果,因此我认为使用不同 NLS_CHARACTERSETS 和转换为字符串的两个数据库之间可能存在问题。

使用select * from NLS_DATABASE_PARAMETERS;我发现一个数据库使用NLS_CHARACTERSET,AL32UTF8,而另一个数据库使用NLS_CHARACTERSET,WE8MSWIN1252

是否可以使用 getString 标准化文本的输出,并考虑数据库上的不同编码?或者还有其他我可能忽略的事情吗?

当前正在执行此操作:

 List<String> databaseList = new ArrayList<>();
while (rs.next()) {
int columnCount = rs.getMetaData().getColumnCount();

StringBuilder rsStringBuilder = new StringBuilder();


for (int i = 1; i <= columnCount; i++ ){
String rsString = null;
try {
rsString = rs.getString(i);
} catch (SQLException e1) {
e1.printStackTrace();
}
rsStringBuilder.append(rsString).append(",");

}

databaseList.add(rsStringBuilder.toString());
}

然后,我会将数据库一中的数据库列表的结果与数据库二中的数据库列表的结果进行比较。我也尝试过这样做来标准化信息,但它返回一些无法正确打印的字符,并且差异仍然在相同位置错误地标记:

   for (int i = 1; i <= columnCount; i++) {

byte[] bytes = rs.getBytes(i);
String rsString;
if (bytes != null) {

rsString = new String(bytes, StandardCharsets.UTF_8);
rsStringBuilder.append(rsString).append(",");

} else {

rsString = "NULLVALUE";
rsStringBuilder.append(rsString).append(",");
}

}

它返回类似 A_C16911,USUMMARY,VARCHAR2,�8,IAMNULL,Y, 的内容。
在阅读了一些有关使用 UTF-8 作为标准的其他答案后,我想尝试一下。任何帮助,将不胜感激。

最佳答案

几乎可以肯定是数据库的NLS_CHARACTERSET设置造成的;右单引号 ' 的 Unicode AL32UTF8 字符集值为 U+2019;对于 WE8MSWIN1252,它是 0x92

您可能必须遍历由 String 填充的 char[] 数组。 ,对于每个元素,从 Character 类中执行以下操作:invoke codePointAt(char[] a, int index)调用,然后使用返回的int调用isAlphabetic(int codePoint) ,然后也许 isDigit(int codePoint)然后,如果其中一个为真,则与另一个数据库进行比较,如果两者都为假,则您可能正在处理两个字符集中不同的标点符号或符号,并且可能会被忽略。

为了使您的比较更加稳健,您可能还需要检查 isWhitespace(int codePoint)我看到的一个常见问题是,当人们从包含不间断空格 (U+00A0) 的 Microsoft Word 文档或网页进行剪切和粘贴时,而数据库包含常规空格 (U+0020)。该方法还检查制表符、垂直制表符等。

关于java - 比较 JDBC 结果集的文本输出时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50140626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com