我正在使用jdbc:sqlite访问sqlite数据库并使用简单的select语句获取一些记录。数据库中有行但java函数不返回任何内容。
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 ;
}
}
直接在数据库上使用sql语句。我正在使用Razor sql查看数据库,如果这有任何区别。
答案 0 :(得分:1)
您关闭ResultSet
中的GetData
,因此当GetStopBS
尝试将其加载到数据结构中时,光标不可用。
我会重写此代码以正确执行此操作。你很亲密,但不在那里。
了解Sun编码标准。您遵循.NET标准,而不是Java。
当您关闭语句,结果集和连接时,您的心脏在正确的位置,但我不同意您放置代码的位置。我建议永远不要将java.sql包引用传递出创建它们的方法范围。创建它们,使用它们,然后以相同的方法关闭它们。
您还应该在finally块中关闭它们,将关闭包装在单独的try / catch块中。