#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.