我弄java连接数据库怎么老是出现错误啊?请高手回答!谢谢

package com.test.jdbc;

import java.beans.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Connection;

public class Testjdbc {
public static void main(String[] args)
{
String driver="com.mysql.jdbc.Driver";
String username="root";
String passwd="123";
String url="jdbc:mysql://localhost:3306/guo";
java.sql.Statement stmt=null;
java.sql.Connection cnn=null;

try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
cnn=DriverManager.getConnection(url, username, passwd);

stmt=cnn.createStatement();

ResultSet rs=stmt.executeQuery("select * from animal");
String str=rs.getString(1);
System.out.println(str);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

错误:
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:5650)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5570)
at com.test.jdbc.Testjdbc.main(Testjdbc.java:33)

ResultSet的游标默认在第一行的前面,你需要把它移动到第一行,像这样
package com.test.jdbc;

import java.beans.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mysql.jdbc.Connection;

public class Testjdbc {
public static void main(String[] args)
{
String driver="com.mysql.jdbc.Driver";
String username="root";
String passwd="123";
String url="jdbc:mysql://localhost:3306/guo";
java.sql.Statement stmt=null;
java.sql.Connection cnn=null;

try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
cnn=DriverManager.getConnection(url, username, passwd);

stmt=cnn.createStatement();

ResultSet rs=stmt.executeQuery("select * from animal");
if (rs.next()) {
String str=rs.getString(1);
System.out.println(str);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-27
图显IP:
String str=rs.getString(1);改为:
while(rs.next){
String str=rs.getString(1);
}

参考资料:老k博客

第2个回答  2011-08-27
楼上两位完全正确,原因:ResultSet rs=stmt.executeQuery("select * from animal");中的ResultSet是一个相当于Set的数据结构,与List、Map的相似,建议看一下Java 数据结构,你就会很容易明白了
相似回答