jdbc: sqlite pas de récupération des données
-
24-10-2019 - |
Question
J'utilise un jdbc: sqlite pour accéder à un sqlite db et obtenir des enregistrements avec une simple instruction select. Il y a des lignes dans la base de données, mais la fonction retourne java rien.
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 ;
}
}
Utilisation de l'instruction SQL directement sur les travaux de base de données. Un j'utilise pour afficher la db si cela fait une différence sql rasoir.
La solution
Vous fermez votre ResultSet
en GetData
, donc par les essais de GetStopBS
de temps pour le charger dans la structure de données, le curseur ne sont pas disponibles.
Je récrire ce code pour le faire correctement. Vous êtes à proximité, mais pas là.
Découvrez les normes de codage Sun. Vous suivez les normes .NET, pas Java.
Votre coeur est au bon endroit lorsque vous fermez votre déclaration, jeu de résultats, et la connexion, mais je suis en désaccord avec l'endroit où vous placez le code. Je ne recommande jamais passer des références de paquet java.sql hors de la portée de la méthode dans laquelle ils ont été créés. les créer, les utiliser et les fermer dans la même méthode.
Vous devriez aussi les près dans un bloc finally, enveloppant la fermeture en individuel try / blocs catch.