Pregunta

Estoy usando un JDBC: SQLite para acceder a un DB SQLite y obtener algunos registros con una instrucción SELECT simple. Hay filas en la base de datos, pero la función Java no devuelve nada.

   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 ;
    }
}

Uso de la instrucción SQL directamente en la base de datos funciona. Y estoy usando Razor SQL para ver el DB si eso hace alguna diferencia.

¿Fue útil?

Solución

Cierras tu ResultSet en GetData, entonces para el momento GetStopBS intenta cargarlo en la estructura de datos El cursor no está disponible.

Reescribiría este código para hacerlo correctamente. Estás cerca, pero no allí.

Aprenda los estándares de codificación Sun. Estás siguiendo los estándares de .NET, no Java.

Su corazón está en el lugar correcto cuando cierre su declaración, conjunto de resultados y conexión, pero no estoy de acuerdo con dónde pone el código. Recomiendo nunca pasar referencias del paquete Java.sql del alcance del método en el que fueron creados. Crealos, úselos y cierre en el mismo método.

También debe cerrarlos en un bloque finalmente, envolviendo el cierre en bloques de try/captación individuales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top