ResultSet的奇怪行为

时间:2015-07-02 19:15:00

标签: java mysql

你好伙伴们希望你度过愉快的一天,我在Java中使用Mysql数据库获取数据时遇到了一个非常奇怪的问题:

 ResultSet tableExistence;
 .
 .
 .

    while (tableExistence.next()) {

          System.out.println("before : "+tableExistence.getInt(MyHttpServer.COL_ID));

        if(tableExistence.getString(MyHttpServer.COL_STATUS).equals(MyHttpServer.STATUS_AVAILABLE)){

          System.out.println("after : "+tableExistence.getInt(MyHttpServer.COL_ID));    

       ...
 }

奇怪的是,“之前”的值是id的正确值,但是在if方法之后,“after”的值返回了一些像1234125151231的东西,任何想法为什么会出现这个问题?!!!! < / p>

1 个答案:

答案 0 :(得分:0)

ResultSet documentation州:

  

文档确实说&#34;为了获得最大的可移植性,每行中的结果集列应该按从左到右的顺序读取,每列应该只读一次。&#34;

从技术上讲,它有点合理。但是:

  • 我实际上希望任何现代的,支持良好的数据库都允许您以任意顺序多次访问列
  • 只是返回一个不正确的值,而不是抛出异常来表明问题非常讨厌

如果您正在获取clob或blob,可能会有一种解释 - 驱动程序可能在这种情况下决定&#34;只从左到右&#34;更合理,避免在内存中保留太多数据。它只是返回损坏的数据仍然不是很好。

因此,虽然这是可能的答案,但我还是:

  • 检查连接和ResultSet是否同时从多个线程中使用
  • 检查您是否使用了最新版本的MySQL驱动程序