2011-01-21 27 views
0

/*質問*/異なる結果

こんにちは、私は、Eclipse 3.6.1(ヘリオス)を使用していると私は、JDBCインタフェースを介してSQLiteデータベースと連携答えました。問題は、デバッグモードと実行モードで異なる結果になっていることです。ここにテストケースがあります:

public static void main(String[] args){ 
    String db_name = /* path to some SQLite database */; 
    try { 
     // If we using ch-werner SQLite Java Wrapper/JDBC Driver 
     Class.forName("SQLite.JDBCDriver"); 

     // If we using Xerial or Zentus impl. 
     Class.forName("org.sqlite.JDBC"); 

     Connection con = DriverManager.getConnection("jdbc:sqlite:" + db_name); 
     Statement statement = con.createStatement(); 
     ResultSet rs; 
     try { 
      rs = statement.executeQuery("SELECT * FROM sites;"); 
      boolean flag = rs.isBeforeFirst(); // Breakpoint here 
      System.out.println(flag); 
      if (flag) rs.next(); 
      System.out.println(rs.getObject(1)); 
     } finally { 
      statement.close(); 
      con.close(); 
     } 
    } catch(Exception ex) { 
     ex.printStackTrace(); 
    } 
} 

私はJDK 1.6.0、1.6.0_23、JRE 1.6.0を試しました。異なるSQLiteテストデータベースに対して、JDBC-SQLite:ch-werner SQLite Java Wrapper/JDBC Driver(r2011-01-06)、Zentus SQLiteJDBC(0.5.6)、およびXerial SQLite JDBC Driver(Zentus拡張、3.6.20および3.7.2を試しました)の3つの実装。

私は実行コンフィギュレーションの下でこれを実行した場合、それは罰金(プリントtrueと目的のオブジェクトを)動作しますが、私は(ステップオーバーのに続いて、ブレークポイントを使用して、)ステップバイステップのデバッグをしようとすると、それは常にfalseを出力し、getObjectが失敗しました異なる理由(ch-werner implの下のjava.lang.ArrayIndexOutOfBoundsException: 2 >= 1、およびその他の2つの下のjava.lang.IllegalStateException: SQLite JDBC: inconsistent internal state)です。 JVM引数は設定されていません。最初からコードを記述するだけです。私はNetBeans 6.9の下でこのバグを再調整できませんでした。

何か間違っているのですか?

答えて

2

デバッグ設定を使用して、各行を1つずつステップ実行する代わりに "go"(またはNetbeansが使用するもの)を押すとどうなりますか?

マイ推測あなたは副作用(例えばrs.next())と、いくつかの方法を評価し、あなたがライン上でステップとして、アプリケーションの状態を台無しにされた時計を持っていることです。あなたはすべての後のgetX()に時計を置くとしたら

+0

あなたの推測はまったく正しいです、私はそのような愚かであることのために申し訳ありません:)私はあなたの答えをすぐに受け入れます。 –

0
int getX(){ 
    y++; 
    return x; 
} 

は、デバッガがgetXメソッドを呼び出します()とyは1ずつ増加でしょうそして、あなたのプログラムの開発は、実行モードとは異なる動作をしますブレークポイントを設定します。