JDBC: SQLite не дает
-
24-10-2019 - |
Вопрос
Я использую JDBC: SQLite, чтобы получить доступ к SQLite DB и получить несколько записей с помощью простого оператора 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 для просмотра DB, если это имеет какое -либо значение.
Решение
Вы закрываете ResultSet
в GetData
, так что к тому времени GetStopBS
пытается загрузить его в структуру данных, курсор недоступен.
Я бы переписал этот код, чтобы сделать это правильно. Ты рядом, но не там.
Узнайте стандарты кодирования солнца. Вы следите за стандартами .NET, а не Java.
Ваше сердце находится в нужном месте, когда вы закрываете свое заявление, набор результатов и соединение, но я не согласен с тем, где вы помещаете код. Я рекомендую никогда не передавать ссылки на пакет java.sql из прицела метода, в котором они были созданы. Создайте их, используйте их и закрывайте тем же методом.
Вы также должны закрыть их в наконец -то блоке, обернув закрытие в отдельных блоках Try/Catch.