【问题标题】:Fetch oracle data VARCHAR2(N BYTE) return blank string in JAVA获取oracle数据VARCHAR2(N BYTE)在JAVA中返回空白字符串
【发布时间】:2018-11-21 12:23:42
【问题描述】:

我想知道发生了什么,我试图从 ORACLE 数据库中获取数据。该列的数据类型是 VARCHAR2(40 BYTE) NOT NULL ENABLE。

来自@Thoma 在评论部分的建议,我已将图片更改为文字。

在 SQL DEVELOPPER 中,我得到以下结果

SELECT ZONE_DESC FROM IC_RATE_ZONES;
"ZONE_DESC"
VIRGIN ISLANDS UK
VIRGIN ISLANDS US
WALLIS AND FUTUNA IS
YEMEN
ZAMBIA
ZAMBIA MOBILE

当我尝试在 JAVA 代码中获取这些数据时:

try{
    con = conn.getOracle();
    stm = con.createStatement(); 
    Rs = stm.executeQuery("select ZONE_DESC FROM IC_RATE_ZONES");
    while(Rs.next()){
              System.out.println(Rs.getString("ZONE_DESC"));
    }
} catch(Exception e){
    e.printStackTrace();
}

我在控制台输出中得到一个空白结果。

【问题讨论】:

  • 您可能希望至少以正确格式的文本形式发布您的代码,而不是发布图像。这使得保存(图像可以被删除)和使用变得更容易 - 这表明您付出了一些努力。
  • @Thomas,对此感到抱歉。这是一个远程主机,由于限制,我无法复制它。我会试着把它都写下来,稍后再发布。
  • 您对控制台有何期待?您将数据添加到模型中,但不会将实际数据记录到控制台。试试System.out.print(Rs.getString(1))
  • 有没有可能你执行的代码不是你看到的代码?

标签: java oracle fetch varchar2


【解决方案1】:

非常感谢所有花时间回答问题的人。 @secretsuperstar 在评论部分提到了该解决方案,但我第一次做错了。

https://bjurr.com/jdbc-problem-resultset-getstring-returns-nothing/

它必须先获取 ASCII 并读取它。数据类型使它变得复杂。

这是最终结果:

try{
        con = conn.getOracle();
        stm = con.createStatement();
         Rs = stm.executeQuery("select ZONE_DESC FROM IC_RATE_ZONES");

        while(Rs.next()){
            String str = new String();
            InputStreamReader in = new InputStreamReader(Rs.getAsciiStream("ZONE_DESC"));
            while(in.ready()){
                str = str + (char)in.read();
            }
            System.out.println(str);
        }
    } catch(Exception e){
        e.printStackTrace();
    }

谢谢大家。希望它能帮助别人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 2016-04-01
    • 2014-03-18
    • 2018-02-16
    • 2013-03-08
    • 2013-01-17
    • 1970-01-01
    • 2017-06-14
    相关资源
    最近更新 更多