Java &引用;“结果集未正确定位”;调用了.next(),但仍然没有';我不工作,请告诉我好吗?
我正试图从我用postgresql创建的数据库中提取歌曲数据。我一直遇到这个错误,我不知道该怎么做,因为我调用了resultSet.next()。 有什么建议吗Java &引用;“结果集未正确定位”;调用了.next(),但仍然没有';我不工作,请告诉我好吗?,java,sql,postgresql,Java,Sql,Postgresql,我正试图从我用postgresql创建的数据库中提取歌曲数据。我一直遇到这个错误,我不知道该怎么做,因为我调用了resultSet.next()。 有什么建议吗 String SQL = "SELECT trackName, albumName FROM tracks, artists, albums WHERE 'song' = tracks.trackname AND tracks.mainartist = artists.artistname AND al
String SQL = "SELECT trackName, albumName FROM tracks, artists,
albums WHERE 'song' = tracks.trackname AND tracks.mainartist =
artists.artistname AND albums.artist = artists.artistname";
try
{
org.postgresql.Driver.isRegistered();
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection(url,username,password); //creates a new connection
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(SQL);
resultSet.next();
String album = resultSet.getString(3);
String artist = resultSet.getString(4);
String trackName = resultSet.getString(2);
String feat = resultSet.getString(5);
String date = resultSet.getString(6);
console.println("");
console.println("");
console.println("Track Name: "+trackName);
console.println("");
console.println("Track Album: "+album);
console.println("");
console.println("Track Artist(s): "+artist);
console.println("");
console.println("Featuring: "+feat);
console.println("");
console.println("Track Release Date: "+date);
console.println("");
console.println("\n");
}
catch(Exception e)
{
console.println("SORRY, COULD NOT CONNECT YOU TO THE DATABASE.");
console.println(e);
console.println("");
e.printStackTrace();
}
我要在终端上打印出来:
SORRY, COULD NOT CONNECT YOU TO THE DATABASE.
org.postgresql.util.PSQLException: ResultSet not positioned properly,
perhaps you need to call next.
这是stackTrace:
org.postgresql.util.PSQLException: ResultSet not positioned properly, perhaps you need to call next.
at org.postgresql.jdbc.PgResultSet.checkResultSet(PgResultSet.java:2772)
at org.postgresql.jdbc.PgResultSet.getString(PgResultSet.java:1894)
at Info.songInfo(Info.java:49)
at __SHELL14.run(__SHELL14.java:5)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at bluej.runtime.ExecServer$3.run(ExecServer.java:752)
在尝试从行中检索信息之前,应始终检查
next
中的返回值,因为您可能不在行中。发件人:
如果新的当前行有效,则返回:true
<代码>错误如果没有更多行
我怀疑您的查询与任何行都不匹配,因此next
返回false
,但您试图从不存在的行读取
因此,在你的情况下:
if (resultSet.next()) {
String album = resultSet.getString(3);
// ...
} else {
// There were no matching rows
}
谢谢你,我试过了,现在跳转到else语句,你知道为什么吗?你的查询可能没有返回任何信息?通过终端中的psql手动运行它,并确保您确实得到了一些返回的行。@GABEPTICHFORD-因为您的查询没有返回任何内容。查询是否应该不返回trackname和albumname???@GABEPTICHFORD-仅当存在匹配行时才返回。显然没有。我建议遵循上面菲利普的建议。