/ *问题回答* /
嗨,我正在使用Eclipse 3.6.1(Helios),我通过JDBC接口使用SQLite数据库。问题是我在Debug和Run模式下得到了不同的结果。以下是测试用例:
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; JDBC-SQLite的3个实现: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) )用于不同的SQLite测试数据库。
如果我在运行配置下运行它,它可以正常工作(打印true
和所需的对象),但是当我尝试逐步调试(使用断点,然后是Step Over)时,它总是打印为false并且getObject
由于不同的原因而失败(java.lang.ArrayIndexOutOfBoundsException: 2 >= 1
在ch-werner impl下,java.lang.IllegalStateException: SQLite JDBC: inconsistent internal state
在另外两个原因下。没有设置JVM参数,只是从头开始编写代码。我没能在NetBeans 6.9下重新解决这个错误。
我做错了什么或什么?
答案 0 :(得分:2)
如果您使用调试配置会发生什么,但只需点击“go”(或Netbeans使用的任何内容)而不是逐个单步执行每一行?
我的猜测是你有一只手表正在评估一些带有副作用的方法(例如rs.next()
)并在你跨过线条时搞砸了应用程序的状态
答案 1 :(得分:0)
int getX(){
y++;
return x;
}
如果你在每个断点之后对getX()进行监视,调试器将调用getX()并且y将增加1.并且你的程序将具有与运行模式不同的行为。