尽管表不为空,但JDBC返回一个空的ResultSet(rs.isBeforeFirst()== true)

我正在尝试为我的Web服务完成数据库访问方法。 服务和数据库访问方法适用于数据库中的所有其他表,但这种特定方法不适用。 当我查询DB时, ResultSet总是返回空(意味着isBeforeFirst() == true )。

经过多次尝试后,我将查询切换为一个简单的SELECT * FROM VIDEOS ,看看问题是我输入的数据与我在查询中使用的数据之间是否存在差异,但即使这个简单的查询选择表格中的所有项目也没有t返回任何结果。

这是我用来从数据库中提取信息的方法:

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

任何帮助将非常感谢。

澄清编辑:该方法是Web服务的一部分,该服务从数据库中提取某个video的路径,然后发送到客户端。 video由客户端上传,然后存储在文件系统中,其路径存储在数据库本身中。

一旦我看到数据库工作,我将用SELECT * FROM VIDEOS WHERE PHONENUM = '%s' AND DATETIME = '%s'", phonenum, timeStamp替换SELECT * FROM VIDEOS SELECT * FROM VIDEOS WHERE PHONENUM = '%s' AND DATETIME = '%s'", phonenum, timeStamp以便查询提取我需要的确切项目。

如果下一次调用next()将光标放在ResultSet的第一行,则isBeforeFirst()返回true 。 换句话说,任何具有数据的成功查询一旦执行,将生成一个带有isBeforeFirst()ResultSet返回true

只需从代码中删除该块,并让rs.next()循环处理可能为空的ResultSet

 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"); result = new Object[6]; ResultSet rs = stmt.executeQuery(query); 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); } } /* catch and finally snipped for clarity of the answer */