Search code examples
jdbcresultset

ResultSet.next() returns false with non-empty table


I don't exactly understand why ResultSet.next() returns false in my code. I'm using intelliJ Idea and oracle database. I have 2 classes: DataHandler and JavaClient

import java.sql.ResultSet;
import java.util.Locale;
public class JavaClient {
    JavaClient() {}

    public static void  main(String[] args) throws Exception {
        Locale.setDefault(Locale.ENGLISH);
        DataHandler datahandler = new DataHandler();
        ResultSet rset = datahandler.getAllStudent();
        if (!rset.isBeforeFirst())
            System.out.println("False");
        while (rset.next()) {
            System.out.println(rset.getObject(1) + " " +
                    rset.getString(2) + " " +
                    rset.getString(3) + " " +
                    rset.getString(4));
        }
    }
}

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import oracle.jdbc.pool.OracleDataSource;
public class DataHandler {
    public DataHandler() {
    }

    String jdbcUrl = "jdbc:oracle:thin:@//localhost:1525/XE";
    String userid = "correctuserid";
    String password = "correctpassword";
    Connection conn;
    Statement stmt;
    ResultSet rset;
    String query;

    public void getDBConnection() throws SQLException {
        OracleDataSource ds;
        ds = new OracleDataSource();
        ds.setURL(jdbcUrl);
        conn = ds.getConnection(userid, password);
    }

    public ResultSet getAllStudent() throws SQLException {
        getDBConnection();
        stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        query = "SELECT * FROM TEST ORDER BY FullName";
        System.out.println("\nExecuting query: " + query);
        rset = stmt.executeQuery(query);
        return rset;
    }
}

When I run this program, I get the following result:

Executing query: SELECT * FROM TEST ORDER BY FullName
False

Process finished with exit code 0

When I write this query in sqlplus, I get this result: enter image description here

So my question is why do I get false in resultset.next() when my table isn't empty?


Solution

  • Please do a commit and then execute the program again.