Java 不';在JDBC中查看结果集时,无法检索记录

Java 不';在JDBC中查看结果集时,无法检索记录,java,mysql,jdbc,resultset,data-retrieval,Java,Mysql,Jdbc,Resultset,Data Retrieval,现在我正在学习java中的ResultSet类型。在这里,我编写了以不同方式查看记录的代码。首先,我显示了emp4表中的所有记录,然后我开始以不同的方式查看这些记录(上一次、第一次、下一次)。这正是我要查找的,但它不会显示emp4表中显示的所有记录。看到第一个程序它不工作,但如果我记录了第41行(在第二个程序中看到这个),它就工作得很好。有什么问题吗?我的代码有问题吗 代码示例1 package demojdbc; import java.sql.Connection; import java

现在我正在学习java中的ResultSet类型。在这里,我编写了以不同方式查看记录的代码。首先,我显示了emp4表中的所有记录,然后我开始以不同的方式查看这些记录(上一次、第一次、下一次)。这正是我要查找的,但它不会显示emp4表中显示的所有记录。看到第一个程序它不工作,但如果我记录了第41行(在第二个程序中看到这个),它就工作得很好。有什么问题吗?我的代码有问题吗

代码示例1

package demojdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MysqlCon{

private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_CONNECTION = "jdbc:mysql://localhost:3306/vinoth";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "vino";

    public static void main(String args[])throws SQLException{

        //Creating statement and connection 
        Connection dbConnection = null;
        Statement stmt = null;

        try{

            //Creating class driver
            Class.forName(DB_DRIVER);

            //Creating Database Connection
            dbConnection = DriverManager.getConnection(DB_CONNECTION,DB_USER,DB_PASSWORD);

            //Creating statement
            stmt = dbConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

            //Creating query
            String sql = "SELECT id,gmail,yahoo from emp4";

            //Creating ResultSet
            ResultSet rs = stmt.executeQuery(sql);

            //Displaying database
            System.out.println("Displaying records before doing some operations");
            System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getString(3));

            System.out.println("Displaying records for last row");
            rs.last();

            int id = rs.getInt("id");
            String gmail = rs.getString("gmail");
            String yahoo = rs.getString("yahoo");

            //Displaying records in last row
            System.out.println("ID : "+id);
            System.out.println("GMAIL : "+gmail);
            System.out.println("YAHOO : "+yahoo);

            System.out.println();
            rs.first();
            System.out.println("Displaying records for first row");

            id = rs.getInt("id");
            gmail = rs.getString("gmail");
            yahoo = rs.getString("yahoo");

            //Displaying records in last row
            System.out.println("ID : "+id);
            System.out.println("GMAIL : "+gmail);
            System.out.println("YAHOO : "+yahoo);

            System.out.println();
            rs.next();
            System.out.println("Displaying records for next row");

            id = rs.getInt("id");
            gmail = rs.getString("gmail");
            yahoo = rs.getString("yahoo");

            //Displaying records in last row
            System.out.println("ID : "+id);
            System.out.println("GMAIL : "+gmail);
            System.out.println("YAHOO : "+yahoo);

        }catch(SQLException e){

            e.printStackTrace();

        }catch(ClassNotFoundException e){

             System.out.println("Plese check the driver class path "+e.getMessage());

        }finally{

            if(stmt != null){

                stmt.close();

            }
            if(dbConnection != null){

                dbConnection.close();

            }
        }
    }
}
在这里,代码可以正常工作

代码示例2

package demojdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MysqlCon{

private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_CONNECTION = "jdbc:mysql://localhost:3306/vinoth";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "vino";

    public static void main(String args[])throws SQLException{

        //Creating statement and connection 
        Connection dbConnection = null;
        Statement stmt = null;

        try{

            //Creating class driver
            Class.forName(DB_DRIVER);

            //Creating Database Connection
            dbConnection = DriverManager.getConnection(DB_CONNECTION,DB_USER,DB_PASSWORD);

            //Creating statement
            stmt = dbConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

            //Creating query
            String sql = "SELECT id,gmail,yahoo from emp4";

            //Creating ResultSet
            ResultSet rs = stmt.executeQuery(sql);

            //Displaying database
            System.out.println("Displaying records before doing some operations");
           //System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getString(3));

            System.out.println("Displaying records for last row");
            rs.last();

            int id = rs.getInt("id");
            String gmail = rs.getString("gmail");
            String yahoo = rs.getString("yahoo");

            //Displaying records in last row
            System.out.println("ID : "+id);
            System.out.println("GMAIL : "+gmail);
            System.out.println("YAHOO : "+yahoo);

            System.out.println();
            rs.first();
            System.out.println("Displaying records for first row");

            id = rs.getInt("id");
            gmail = rs.getString("gmail");
            yahoo = rs.getString("yahoo");

            //Displaying records in last row
            System.out.println("ID : "+id);
            System.out.println("GMAIL : "+gmail);
            System.out.println("YAHOO : "+yahoo);

            System.out.println();
            rs.next();
            System.out.println("Displaying records for next row");

            id = rs.getInt("id");
            gmail = rs.getString("gmail");
            yahoo = rs.getString("yahoo");

            //Displaying records in last row
            System.out.println("ID : "+id);
            System.out.println("GMAIL : "+gmail);
            System.out.println("YAHOO : "+yahoo);

        }catch(SQLException e){

            e.printStackTrace();

        }catch(ClassNotFoundException e){

             System.out.println("Plese check the driver class path "+e.getMessage());

        }finally{

            if(stmt != null){

                stmt.close();

            }
            if(dbConnection != null){

                dbConnection.close();

            }
        }
    }
}
输出

显示最后一行的记录 身份证号码:5 GMAIL:naveen 雅虎:纳文洛克

显示第一行的记录 身份证号码:1 GMAIL:vinothvino 雅虎:维诺萨斯

显示下一行的记录 身份证号码:2 GMAIL:ajithvirje 雅虎:ajith234

请让我明白。为什么我的代码没有在代码示例1程序中获取任何记录

下图表示emp4表中的以下记录


原因是,在使用
getInt()
/
getString()
访问数据之前,您没有调用
结果集的游标。请尝试以下方法:

//Creating ResultSet
ResultSet rs = stmt.executeQuery(sql);

//Displaying database
System.out.println("Displaying records before doing some operations");

if (rs.next()) {        
    System.out.println(rs.getInt(1) + " "
        + rs.getString(2) + " " + rs.getString(3));
}
如果要循环遍历整个结果集,请改用
while(rs.next())

第二个代码段可以工作,因为在第一次访问列值之前,将光标移动到的最后一个位置

请注意,在访问列值之前,应始终检查
rs.next()
/
rs.last()
/
rs.first()
方法的返回值。错误的返回值表示结果集没有行,并且在调用结果集的任何getter(
rs.getInt()
/
rs.getString()
等)方法时会引发异常。

您需要使用.next()函数跳转到结果集中的第一条记录

while(rs.next()){
        System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getString(3));        }

给我们看一个堆栈跟踪或第一个代码的输出,如果它运行不正常,怎么样?是的,它不工作。它只是显示了一个异常,如“java.sql.SQLException:Before start of result set”,但是如果我对第41行进行注释,那么它就可以正常工作了。。。但我想提取这些数据,并想在执行操作(上一次、第一次、下一次)之前显示这些数据。非常感谢。。。。。它真的很好用,这是我现在所期待的,没有任何问题,但我怀疑?为什么它不适用于我发布的那一行,但它只适用于while或if?为什么?两者都是一样的,只知道吗?还是不?我已经编辑了这个问题来解释为什么您的第二个代码示例能够工作。基本上,对
ResultSet
getX
方法的任何调用之前都需要有一个移动光标的方法。这对我很有帮助。再次感谢您的帮助!!!谢谢你的努力。。。