我正在尝试为我的 Web 服务完成数据库访问方法。服务和数据库访问方法适用于数据库中的所有其他表,但这个特定方法却不行。当我查询数据库时,ResultSet
总是返回空(意思是 isBeforeFirst() == true
)。
经过多次尝试,我将查询简化为一个简单的 SELECT * FROM VIDEOS
以查看问题是否出在我输入的数据和我在查询中使用的数据之间,但即使是这样简单的选择表中所有项目的查询未返回任何结果。
这是我用来从数据库中提取信息的方法:
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 服务的一部分,该服务从数据库中提取特定视频的路径,并将其发送到客户端。视频由客户端上传,然后存储在文件系统中,它们的路径存储在数据库本身中。
一旦我看到数据库正常工作,我就会将 SELECT * FROM VIDEOS
替换为 SELECT * FROM VIDEOS WHERE PHONENUM = '%s' AND DATETIME = '%s'", phonenum, timeStamp
以便查询提取我需要的确切项目。
最佳答案
isBeforeFirst()
如果下一次调用 next()
会将光标放在 ResultSet
的第一行,则返回 true
。换句话说,任何成功的包含数据的查询一旦执行,将生成一个 ResultSet
,其中 isBeforeFirst()
返回 true
。
只需从您的代码中删除该 block ,然后让 rs.next()
循环处理可能为空的 ResultSet
s:
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 */
关于java - JDBC 返回一个空的 ResultSet (rs.isBeforeFirst() == true) 尽管表不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324603/