jdbc: sqlite не извлекает данные

#java #sqlite #sqlitejdbc

#java #sqlite #sqlitejdbc

Вопрос:

Я использую jdbc: sqlite для доступа к базе данных sqlite и получения некоторых записей с помощью простого оператора select. В базе данных есть строки, но функция Java ничего не возвращает.

    private static String ConnectionString = "jdbc:sqlite:D:\My Documents\NetBeansProjects\IntelligentBusStop\BusSystem.db";

private static ResultSet GetData(String command)
{
    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;
    try
    {
        Class.forName("org.sqlite.JDBC");
        connection = DriverManager.getConnection(ConnectionString);
        statement = connection.createStatement();
        resultSet = statement.executeQuery(command);
        return resultSet;
    }
    catch (Exception e)
    {
        e.printStackTrace();
        return null;
    }
    finally
    {
        try
        {
            resultSet.close();
            statement.close();
            connection.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
 public static ArrayList<StopBS> GetStopBS()
{
    ResultSet results = GetData("Select StopNumber, Tag, Latitude, Longitude FROM StopTable ");
    ArrayList<StopBS> stops = new ArrayList<StopBS>();
    try
    {
        while (results.next())
        {
            StopBS newStop = new StopBS();
            newStop.StopNumber = results.getInt("StopNumber");
            newStop.Tag = results.getString("Tag");
            newStop.Lat = results.getFloat("Latitude");
            newStop.Long =  results.getFloat("Longitude");
            stops.add(newStop);
        }
        return stops;
    }
    catch (Exception e)
    {
        e.printStackTrace();
        return null ;
    }
}
  

Использование инструкции sql непосредственно в базе данных работает. Я использую Razor sql для просмотра базы данных, если это имеет какое-либо значение.

Комментарии:

1. Сколько раз выполняется цикл while? Вставьте system.out.println или что-то в этом роде

Ответ №1:

Вы закрываете свой ResultSet вход GetData , поэтому ко времени GetStopBS попытки загрузить его в структуру данных курсор недоступен.

Я бы переписал этот код, чтобы сделать это правильно. Вы близки, но не там.

Изучите стандарты кодирования Sun. Вы следите .СЕТЕВЫЕ стандарты, а не Java.

Ваше сердце находится в правильном месте, когда вы закрываете свою инструкцию, результирующий набор и соединение, но я не согласен с тем, куда вы поместили код. Я рекомендую никогда не передавать ссылки на пакеты java.sql за пределы области метода, в которой они были созданы. Создайте их, используйте и закройте тем же методом.

Вы также должны закрыть их в блоке finally, обернув закрытие в отдельные блоки try / catch.