JDBC gibt eine leere Ergebnismenge (rs.isBeforeFirst() == true), obwohl die Tabelle nicht leer ist

Ich bin versucht, um einen Zugriff auf die DB-Methode für meine Web-Service. Der service und die DB-Zugriffs-Methoden funktionieren für alle anderen Tabellen in der DB, aber diese spezielle Methode nicht. Wenn ich die Abfrage der DB, die ResultSet immer wieder leer (also isBeforeFirst() == true).

Nach vielen versuchen habe ich Schneide meine Abfrage auf eine einfache SELECT * FROM VIDEOS um zu sehen, ob das problem ein Unterschied zwischen den Daten, die ich eingegeben und die Daten, die ich in meiner Abfrage, aber selbst diese einfache Abfrage auswählen, um alle Elemente in der Tabelle nicht zurückkehren, ohne Ergebnis.

Dies ist die Methode, die ich verwenden, um ziehen Sie die Informationen aus der DB:

public static Object[] getVideo(String phonenum, String timeStamp)
{
    Connection c = null;
    Statement stmt = null;
    Object[] result = null;
    try
    {
        Class.forName("org.sqlite.JDBC");
        c = DriverManager.getConnection("jdbc:sqlite:lineappDB.db");
        c.setAutoCommit(false);
        System.out.println("Opened database successfully");
        stmt = c.createStatement();
        String query = String.format("SELECT * FROM VIDEOS");
        ResultSet rs = stmt.executeQuery(query);

        //If no data was found
        if (rs.isBeforeFirst())
        {
            rs.close();
            stmt.close();
            c.close();
            return null;
        } else
        {
            result = new Object[6];
            while (rs.next())
            {
                result[0] = rs.getInt(1);
                result[1] = rs.getString(2);
                result[2] = rs.getString(3);
                result[3] = rs.getString(4);
                result[4] = rs.getString(5);
                result[5] = rs.getInt(6);
            }
        }
        rs.close();
        stmt.close();
        c.close();
    } catch (Exception e)
    {
        try
        {
            if (!c.isClosed())
            {
                c.commit();
                c.close();
            }
        } catch (Exception ex)
        {
            System.err.println(ex.getClass().getName() + ": " + ex.getMessage());
            return null;
        }
        System.err.println(e.getClass().getName() + ": " + e.getMessage());
        return null;
    }
    System.out.println(String.format("Succesfully pulled from DB - %s %s", result[1], result[2]));
    return result;
}

Jede Hilfe wird sehr geschätzt.

KLÄRUNG EDIT:
Die Methode ist Teil eines web-service, der zieht einen Weg von einem bestimmten video aus der DB, werden zu einem client gesendet. Die videos hochgeladen von Kunden und sind dann im Dateisystem abgelegt, und Ihre Pfade sind gespeichert in der DB selbst.

Sehe ich einmal die DB funktioniert, werde ich ersetzen SELECT * FROM VIDEOS mit SELECT * FROM VIDEOS WHERE PHONENUM = '%s' AND DATETIME = '%s'", phonenum, timeStamp so, dass die Abfrage zieht die genaue Position, die ich brauche.

Ich würde alle .close() Befehle in eine finally block
Danke für die Ratschläge, das werde ich tun.
wenn ich meine .close() Befehle in einem finally block, eclipse schreit, dass ich nicht die Ausnahmen behandeln. Und so werde ich brauchen, um eine Doppel - try catch block wieder. Konnte Sie zeigen eine korrekte Beispiel?
tatsächlich, in diesem Tag und Alter, warum nicht die try-mit-Ressourcen-idiom?

InformationsquelleAutor Yuval | 2014-10-12

Schreibe einen Kommentar