【问题标题】:java ojdbc 6 getInt() by column number returning wrong valuejava ojdbc 6 getInt() 按列号返回错误值
【发布时间】:2016-05-14 08:05:41
【问题描述】:

我从 ojdbc getInt() 得到一个非常有趣的错误,按列号。

ps = conn.prepareStatement("select count(*) from tableA");
rs = ps.executeQuery();
int x;
if (rs.next())
    x = rs.getInt(1);

ps = conn.prepareStatement("select count(*) as someVariable from tableA");
rs = ps.executeQuery();
int y;
if (rs.next())
    y = rs.getInt(1);

x 和 y 的值不同。 y 是我期望的正确数字。

我正在使用带有 ojdbc6.jar (11.2.0.3.0) 的 java 7

谢谢。

【问题讨论】:

  • 这似乎不太可能。它是相同的连接(即相同的会话;或至少到相同的数据库和凭据,两者之间没有数据更改)?您是否正在初始化 x 和 y,如果是的话,这与您最终获得的 x 值是否有任何相似之处?以后可能会有代码在您检查之前修改 x 吗? MCVE 可能比部分 sn-p 有用。
  • x 和 y 初始化为 0,并且都连接到同一个凭证。两者都是分开运行的。

标签: java oracle11g ojdbc


【解决方案1】:
ps = conn.prepareStatement("select count(*) as someVariable from tableA");
ps = conn.prepareStatement("select count(*) as result from tableA");
rs = ps.executeQuery();
int x;
if (rs.next())
    x = rs.getInt("result");

ps = conn.prepareStatement("select count(*) as someVariable from tableA");
rs = ps.executeQuery();
int y;
if (rs.next())
    y = rs.getInt("someVariable");

你没有忘记 rs.close()、conn.close()、statement.close() 吗?最好是尝试资源,而不是尝试。

try(Connection con = DriverManager.getConnection("DBpath","usr","pswd")) {
    //doSomething
}

在这种情况下,您不需要关闭它们,它们会自动关闭。 注意:您只能对可关闭的对象执行此操作。

【讨论】:

    猜你喜欢
    • 2020-02-06
    • 2021-12-20
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    相关资源
    最近更新 更多