日期:2014-05-17  浏览次数:21074 次

为什么查询结果,一定要调用Resultset的next()??

package updateDemo;
//学习数据库很简单的,就只有四个步骤:1.加载驱动;2.链接数据库;3.操作数据;4.关闭数据库;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class ExcuteUpdateJDBC {
//驱动程序就是之前在classpa中配置的jdbc的驱动程序的jar包中;
public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
//链接地址是由各个数据库生产商单独提供的,所以需要单独记住
public static final String DBURL = "jdbc:oracle:thin:@127.0.0.1:1521:zhu";
public static final String DBUSER   = "scott";//连接数据库用户
public static final String DBPASS = "tiger";//连接数据库密码
public static void main(String[] args)throws Exception{
Connection conn = null;//表示数据库的连接的对象
Class.forName(DBDRIVER);//1.使用Class加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);//2.连接数据库

String sql = "select pid,name,age,birthdat,salary from person";

Statement state = conn.createStatement();//3.操作数据

ResultSet result = state.executeQuery(sql);
//state.executeUpdate(sql);  
//while(result.next()){
printf(result.getNString(3));
//}//只有把那个注释去掉,编译才能正确,这到底是怎么回事??我就直接打印不行的吗??


conn.close(); //4.关闭数据库;
}
public static void printf(Object obj){ 
System.out.println(obj);
}
}

提示的错误是:

Exception in thread "main" java.sql.SQLException: 未调用 ResultSet.next
at oracle.jdbc.driver.OracleResultSetImpl.getNString(OracleResultSetImpl.java:1010)
at updateDemo.ExcuteUpdateJDBC.main(ExcuteUpdateJDBC.java:28)

------解决方案--------------------
要把当前行移动到结果集的第一行啊。
------解决方案--------------------
ResultSet 保存的是一个结果集,就相当于Java当中的集合。你想取得集合中某个对象的某个属性的话,通过集合.get属性,也同样不可以的啊。ResultSet.next()只是提供了一种遍历的方法。