英文:
I don't get into a loop even though the ResultSet is full
问题
我有一个非空的结果集,它包含6列。但是如果我想使用循环,什么都不会发生。
如果我在SQL Server Management Studio中使用与Java代码中相同的参数调用存储过程,我会得到一个结果:
几分钟前一切都正常
// 那行不起作用,因为我无法进入循环
if (con != null) {
    String an_id = "bkoubik";
    String AS_Aufruf = "exec BfV_Web.sp_Anwender_Start\n@AnwenderID = ?";
    try {
        PreparedStatement STMT = con.prepareStatement(AS_Aufruf);
                
        STMT.setString(1, an_id);
        ResultSet rs = STMT.executeQuery();
                
        // 这个if语句没有进入,那为什么while循环不起作用呢?
        if (!rs.next()) {
            System.out.println("no data");
        } 
        
        ResultSetMetaData meta = rs.getMetaData();
        int intRS = meta.getColumnCount();
        // 这个循环没有进入
        while (rs.next()) { 
            // ...
        }
    }
}
英文:
I have a result set which is not empty. It contains 6 columns. But if I want to use the loop, nothing happens.
If I call the stored procedure in SQL Server Management Studio with the same parameters as in the Java code, I got a result:
A few minutes ago everything worked
// That doesn't work because I can't get into the loop
if (con != null) {
        String an_id = "bkoubik";
		String AS_Aufruf = "exec BfV_Web.sp_Anwender_Start\n@AnwenderID = ?";
		try {
			PreparedStatement STMT = con.prepareStatement(AS_Aufruf);
            
			STMT.setString(1, an_id);
			ResultSet rs = STMT.executeQuery();
			
            //THIS IF STATEMENT IS NOT ENTERING, SO WHY THEN THE WHILE LOOP 
              IS NOT WORKING ?
			if (!rs.next() ) {
			    System.out.println("no data");
			} 
	
			ResultSetMetaData meta = rs.getMetaData();
			int intRS = meta.getColumnCount();
		    //THE LOOP IS NOT ENTERING
			while (rs.next()) { 
              [...]
            }
答案1
得分: 1
intRS 是列数,而不是行数。你的 rs 可能是空的。
英文:
intRS is the column count, not the row count. Your rs is likely empty.
答案2
得分: 0
The first call to rs.next() (before the loop) already consumes the one and only row, so the next call (in the while) will return false.
英文:
The first call to rs.next() (before the loop) already consumes the one and only row, so the next call (in the while) will return false.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。





评论