JDBC迭代错误(从第一次resultset获得空值开始)
我正在与JDBCOracle合作完成学校作业。 我试图从表中获取一些元组,但是resultset.next每次都获得空值。从第一次开始 我使用eclipse进行了调试,连接preparedStatement和resultSet分别得到了T4CConnectionid=82、T4CPreparedStatementid=100和OracleResultSetImplid=111的值JDBC迭代错误(从第一次resultset获得空值开始),jdbc,Jdbc,我正在与JDBCOracle合作完成学校作业。 我试图从表中获取一些元组,但是resultset.next每次都获得空值。从第一次开始 我使用eclipse进行了调试,连接preparedStatement和resultSet分别得到了T4CConnectionid=82、T4CPreparedStatementid=100和OracleResultSetImplid=111的值 Here is the code. package program; import java.sql.C
Here is the code.
package program;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
public class ProgramDao {
public static Connection getConn(){
Connection conn = null;
try{
Class.forName("oracle.jdbc.OracleDriver");
String url = "jdbc:oracle:thin:@dblab.sogang.ac.kr:1521:XE";
String user = "DB20111084";
String pwd = "DB20111084";
conn = DriverManager.getConnection(url, user, pwd);
}catch (Exception e1){
e1.printStackTrace();
}
return conn;
}
public Vector<ProgramDto> allTable(){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
Vector<ProgramDto> v = new Vector<ProgramDto>();
try{
conn = getConn();
String sql = "SELECT P.PROGRAMNAME, T.TRAINERNAME, P.P_TIME, P.P_CAPACITY FROM PROGRAM P, TRAINER T WHERE P.TID=T.TID";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
ProgramDto dto = null;
**while(rs.next()){
dto = new ProgramDto();
dto.setProgramName(rs.getString(1));
dto.setTrainerName(rs.getString(2));
dto.setP_Time(rs.getString(3));
dto.setP_Capacity(rs.getInt(4));
v.addElement(dto);
}
} catch(Exception e1){
e1.printStackTrace();**
} finally {
try{
if(rs != null){
rs.close();
}
if(pstmt != null){
pstmt.close();
}
if(conn != null){
conn.close();
}
}catch(Exception e2){
e2.printStackTrace();
}
}
return v;
}
...
为什么rs.next每次都为null,并跳转到catch子句。
请帮助我..您说您的结果集使用OracleResultSetImpl实例进行初始化。那么你到底在哪里得到空值呢?您可以添加完整的堆栈跟踪吗?rs.next不能返回null。如果可以,您应该获得NullPointerException。请发布异常。当我调试这个程序时,它会正常移动到whilers.next。由双星指向,然后跳转到流行语。如何检查e1.printStackTrace;它不会打印出任何错误消息。@NoinLee如果您使用的是PreparedStatement,则它希望设置值。也许是例外导致了这一点。看一看,PreparedStatement的用法解释得很好。