我尝试从数据库中获取一些数据。连接方法确实有效,但我在获取任何数据格式DB时遇到问题:
SQLConnect s = new SQLConnect();
Connection c = s.getConnection();
Statement st = c.createStatement();
ResultSet rs = st.executeQuery("select * from produkty");
System.out.println(rs.getString(2));
问题在于最后一行(当我评论它时,不会出现错误)。 错误讯息:
Connected to database
Exception in thread "main" java.sql.SQLException: Before start of result set
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:841)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5656)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5576)
at antmedic.Main.main(Main.java:85)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
感谢您的帮助
答案 0 :(得分:5)
您需要调用ResultSet#next()
将结果集光标移动到下一行。通常,当有多行的方法时,请在while
循环中执行此操作。
while (rs.next()) {
System.out.println(rs.getString(2));
}
或者当您期望零行或一行时,请使用if
语句。
if (rs.next()) {
System.out.println(rs.getString(2));
}
答案 1 :(得分:1)
当你获得ResultSet对象时,光标指向第一行之前的行,所以在调用
之后while (rs.next()) {
//your code
}
光标指向下一行
即。第一行。
答案 2 :(得分:0)
请记住,每当select查询触发从数据库检索数据到ResultSet时, 所以ResultSet的结构是
- >零记录区
- >数据库记录区
- >没有记录区
这就是为什么alwayz我们必须将next()与ResultSet对象放在一起,以便它可以从零记录区移动到数据库记录区。
答案 3 :(得分:0)
while(rs.next())
{
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
}
在1,2,....的位置我们也可以使用数据库列名。但从技术上来说,我们总是使用像1,2,3这样的索引....它将来在我们的数据库中发生任何更新的原因,例如更改列名,因此它不会对我们发生任何问题,因为我们没有&# 39; t使用了列名。
答案 4 :(得分:0)
按照那样放下你的代码
while(rs.next())
{
String abc=rs.getString("abc");
}