rs.next() 循环在 Oracle 数据库数据检索中不起作用



Dbconn.java

import com.OracleCon;
public class Dbconn{
    public static void main(String[] args){
        try{
            OracleCon oraclecon = new OracleCon();
            oraclecon.callmethod();
        }catch(Exception e){
            System.out.println("Ex e"+e);
        }
    }
}

甲骨文.java

package com;
import java.lang.NullPointerException;
import java.sql.*;
public class OracleCon{
    String JDBC_DRIVER="oracle.jdbc.driver.OracleDriver";
    String db_URL="jdbc:oracle:thin:@localhost:1521:ORCL";
    String username="SYSTEM";
    String password="root";
    Connection conn = null;
    public OracleCon() {
        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn=DriverManager.getConnection(db_URL,username,password);
            if(conn!=null){
                System.out.println("Database connected");
            }else{
                System.out.println("Problem in connecting datbase");
            }
        }catch(SQLException se){
            System.out.println("Error occured " + se.toString());
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public void callmethod() throws SQLException {
        PreparedStatement statement = null;
        conn = DriverManager.getConnection(db_URL,username,password);
        try{
            Statement stmt = null;
            stmt = conn.createStatement();
            String sql = "select USERID from userdetails";
            System.out.println(sql);
            ResultSet rs = stmt.executeQuery(sql);
            System.out.println("Result set finished "+rs);
            while(rs.next()){
                System.out.println(rs.getString("USERID"));
            }
            rs.close();
        }catch(SQLException se){
            System.out.println("SQL ex"+se);
        }catch(Exception e){
            System.out.println("Ex e"+e);
        }
        finally {
            closeConnection();
        }
    }
    public void closeConnection(){
        try{
            if(conn!=null){
                conn.close();
            }
        }catch(SQLException se){
            se.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

数据库已成功连接,rs正在保存一些对象,该对象由rs.next((上方的Sysout语句显示。但问题是它没有进入while(rs.next(((,我尝试通过在该循环中打印一些名称来尝试它,即使 Sysout 没有打印。我不知道我的代码出了什么问题。它适用于Mysql,但不适用于oracle数据库。

在 Oracle 数据库中,select USERID from userdetails 不会返回任何行。通过将查询更改为 SELECT 1 FROM DUAL 来确认这一点,这将返回一行。然后,调查MySQL和Oracle数据库之间的区别。

看起来您的结果集中没有任何记录。由于 rs.next(( 在第一次调用时返回 false,这意味着它没有任何行。查看结果集文档-http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html

连接到数据库并验证表中是否有行。结果集应该独立于基础数据库正常工作。

尝试这样,您将知道结果集是否包含行

if (!resultSet.isBeforeFirst() ) {  
  //this returns false if the cursor is not before the first record or if there are
  // no rows in the ResultSet.
 System.out.println("No data"); 
} 
else{
do {
    //your logic after fetching the data from the resultset
 } while (resultSet.next());
}

相关内容

  • 没有找到相关文章

最新更新