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

时间:2010-11-12 19:51:39

标签: oracle jdbc

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

代码是这样的:

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列按预期返回正确的值。 QUESTION似乎总是返回空字符串。 DB中的值显然不是空的。

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

我错过了一些完全明显的东西吗?

编辑:

  • sqlplus返回varchar2值就好了

  • 通过odbc连接(而不是瘦身)也可以让事情发挥作用

6 个答案:

答案 0 :(得分:1)

所以没有例外,你没有使用保留字...也许尝试使用其他驱动程序,或选择进入其他表并用空QUESTION列开始实验,然后添加一些值并进行调试。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我遇到了同样的问题,发现问题的根源来自orai18n.jar。一旦我从类路径中删除了这个,问题就消失了。

答案 3 :(得分:1)

我有同样的问题。我无法访问使用的驱动程序,因为连接是使用JNDI从Weblogic服务器获取的。我也无法从服务器中删除任何.jar。

我发现的解决方法:

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

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

String value = new String(resultset.getBytes(), [CHARSET])

答案 4 :(得分:0)

我和eclise GCJ(Stock centos6)和mysql-connector有相同的连接查询同样的问题。恢复到openJDK后问题得以解决。

答案 5 :(得分:0)

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

在经历了很多不同的线程和相当多的试验之后,我得出结论,问题在于我正在使用的ojdbc6.jar版本。之前,我使用ojdbc6.jar和Oracle版本12.1.0.1。这对于连接到OLD Oracle 9i DB来说并不是那么好。在意识到之后,我从Oracle 11.2.0.3切换到ojdbc6.jar,它就像一个魅力。

希望它有所帮助。干杯!