有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从来自数据库的NCR值中以字符形式检索值

我面临着从resultset中以字符形式检索值的问题。结果集以NCR格式显示值(例如,&;#21488;&;#21271;)而不是性格(例如:台北). 我不知道如何从resultSet中获取角色

我从resultSet中获得了价值

           while (resultSet.next()) {
                          resultSet.getString(1); // this value is coming as NCR / or some other text
                   }

我尝试过一种方法,但我有问题

public static String ConvertDecimalNCRToString(String hex)
{
    String myString = hex.replace("&#", "");
    String[] split = myString.split(";");
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < split.length; i++) 
    {
        sb.append((char)Integer.parseInt(split[i]));
    }
    return sb.toString();
}

如果我的字符串是“&;#21488;&;#21271;”然后程序运行正常,但字符串也可以包含NCR值以外的其他值,如“stre1234&;21488&;21271;”在这种情况下,上述方法失败。任何人都可以提出一些好的方法来实现它。我还想知道是否有其他方法可以直接从resultSet而不是NCR值中获取字符值

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    如果数据存储在数字字符引用中,可以使用the UTL_I18N.UNESCAPE_REFERENCE function将其转换回字符作为查询的一部分:

    select utl_i18n.unescape_reference('Test mixing &#21488;&#21271; with plain text')
    from dual;
    
    UTL_I18N.UNESCAPE_REFERENCE('TESTMIXING&#21488;&#21271;WITHPLAINTEXT')         
                                            
    Test mixing 台北 with plain text                                                
    

    当然,您的客户机需要能够处理Unicode字符,您的会话也需要兼容。例如,在带有export LANG="en_US.iso8859-1"export NLS_LANG="ENGLISH_AMERICA.US7ASCII"的Linux PuTTY会话中,通过SQL*Plus运行的查询显示:

    UTL_I18N.UNESCAPE_REFERENCE('TESTMIXING&#21488;&#21271;WITHPLAINTEXT')
                                                                
    Test mixing ?? with plain text
    

    更改export NLS_LANG="ENGLISH_AMERICA.UTF8"会得到:

    UTL_I18N.UNESCAPE_REFERENCE('TESTMIXING&#21488;&#21271;WITHPLAINTEXT')
                                                                
    Test mixing 台北 with plain text
    

    如果我通过Java程序运行相同的查询,我会得到:

    Test mixing ?? with plain text
    

    通过export LANG="en_US.utf8"(或者说,ja_JP.utf8)获得:

    Test mixing 台北 with plain text
    

    其他客户端可能需要不同的设置,例如操作系统或Java语言环境You can read more in the globalisation guide

    您可能还想首先检查存储的值是否真的应该转义