代码之家  ›  专栏  ›  技术社区  ›  Ilia G

VARCHAR2列上的ResultSet.getString()返回空字符串

  •  2
  • Ilia G  · 技术社区  · 15 年前

    免责声明:实际上我对nether Oracle和Java一无所知。问题是在一个项目中,其他一些开发人员在某个时间点完成了项目,然后离开了公司。现在,我必须设置网络服务器,数据库,并让它全部启动和运行。

    代码大致如下:

    OracleDataSource ods = new OracleDataSource();
    ods.setURL("jdbc:oracle:thin:<user>/<password>@localhost:1521:xe");
    OracleConnection ocon = (OracleConnection)ods.getConnection();
    OracleStatement stmt = (OracleStatement)ocon.createStatement();
    OracleResultSet rs = (OracleResultSet)stmt.executeQuery("SELECT POLLID, QUESTION, ISMULTISELECT FROM POLL WHERE POLLID = " + pollID);
    
    if (!rs.next()) {
        System.out.println("No rows found.");
        return false;
    }
    this._PollID = rs.getInt("POLLID");
    this._Question = rs.getString("QUESTION");
    this._IsMultiSelect = rs.getBoolean("ISMULTISELECT");
    

    POLLID和ISMULTISELECT列按预期返回正确的值。这个问题似乎总是返回空字符串。DB中的值显然不是空的。

    这个 rs.getAsciiStream("QUESTION").available() 也返回零。

    我是不是遗漏了一些显而易见的东西?

    编辑:

    • sqlplus返回varchar2值很好

    • 通过odbc连接(与瘦连接相反)也可以使工作正常进行

    6 回复  |  直到 15 年前
        1
  •  1
  •   reg    15 年前

    所以没有例外,您没有使用保留字…可能尝试使用其他驱动程序,或者选择进入其他表并尝试从空的问题列开始,然后添加一些值并调试。

        2
  •  1
  •   Ilia G    15 年前

    感谢所有回复的人。目前看来,问题在于瘦驱动程序和Oracle的XE版本之间。不幸的是,我们没有完整版本的kickin(我们主要是ASP.NET/MS SQL开发人员),所以我们现在必须坚持使用ODBC驱动程序,希望当我们将其推送到实时环境(由第三方托管)时,问题能够神奇地自行解决。很糟糕的假设,但在这一点上我看不到其他选择。。。。

        3
  •  1
  •   rob.fellows    15 年前

    我有同样的问题,发现问题的根源来自orai18n.jar。一旦我把这个从我的课堂上删除,这个问题就消失了。

        4
  •  1
  •   electrotype    11 年前

    我也有同样的问题。我没有访问所使用的驱动程序的权限,因为连接是从使用JNDI的Weblogic服务器获取的。我也不能从服务器上删除任何.jar。

    我找到的解决办法是:

    String value = new String(resultset.getBytes());
    

    如果需要,请确保使用正确的编码:

    String value = new String(resultset.getBytes(), [CHARSET])
    
        5
  •  0
  •   Antti Rytsölä    14 年前

    我对eclise GCJ(Stock centos6)和mysql connector也有同样的问题,它们有相同的连接查询。恢复到openJDK后问题就解决了。

        6
  •  0
  •   jeprubio    8 年前

    我也有同样的问题。”getInt()”将从Oracle 9i DB返回正确的值,但是使用“getString()”将导致空字符串,无论我在eclipse内部或外部的单独Tomcat或其他服务器上运行了多少次。

    在经历了许多不同的线程和许多试验之后,我得出结论,问题出在我使用的ojdbc6.jar版本上。早些时候,我在Oracle版本12.1.0.1.中使用了ojdbc6.jar,这对于连接旧的Oracle9i数据库不是很好。在意识到这一点之后,我从Oracle 11.2.0.3转到了ojdbc6.jar,它的工作非常有魅力。

    希望有帮助。干杯!