Различные результаты при настройке Debug и Run приложения JDBC-SQLite - PullRequest
0 голосов
/ 21 января 2011

/ * Ответ на вопрос * /

Привет! Я использую Eclipse 3.6.1 (Helios) и работаю с базой данных SQLite через интерфейс JDBC. Проблема в том, что я получаю разные результаты в режимах 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; 3 реализации JDBC-SQLite: ch-werner SQLite Java Wrapper / JDBC Driver (r2011-01-06), Zentus SQLiteJDBC (0.5.6) и Xerial SQLite JDBC Драйвер (расширенный Zentus, пробовал 3.6.20 и 3.7.2) для разных тестовых баз данных SQLite.

Если я запускаю это в конфигурации «Выполнить», она работает нормально (печатает true и нужный объект), но когда я пытаюсь выполнить пошаговую отладку (с использованием точки останова, а затем пошагового перехода), она всегда печатает false и getObject терпит неудачу по разным причинам (java.lang.ArrayIndexOutOfBoundsException: 2 >= 1 под ch-werner impl и java.lang.IllegalStateException: SQLite JDBC: inconsistent internal state под двумя другими). Аргументы JVM не заданы, просто код с нуля. Мне не удалось переформулировать эту ошибку в NetBeans 6.9.

Я что-то делаю не так или как?

Ответы [ 2 ]

2 голосов
/ 21 января 2011

Что произойдет, если вы используете конфигурацию отладки, но просто нажимаете «go» (или то, что использует Netbeans) вместо того, чтобы переходить по каждой строке одна за другой?

My думаю, таковоу вас есть часы, которые оценивают какой-либо метод с побочными эффектами (например, rs.next()) и портят состояние приложения при переходе по линиям.

0 голосов
/ 01 мая 2016
int getX(){
    y++;
    return x;
}

Если вы будете ставить часы на getX () после каждой точки останова, отладчик будет вызывать getX (), а y будет увеличиваться на 1. И ваша программа будет вести себя иначе, чем в режиме выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...