在 JDBC 中查看 ResultSet 时不检索记录

Vin*_*ino 2 java mysql jdbc resultset data-retrieval

现在我正在学习 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();

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,代码将正常工作......

代码示例 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();

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出

显示最后一行 ID 的记录:5 GMAIL : naveen YAHOO : naveenrockz

显示第一行 ID 的记录:1 GMAIL : vinothvino YAHOO : vinothasd

显示下一行 ID 的记录:2 GMAIL:ajithvirje YAHOO:ajith234

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

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

在此处输入图片说明

Mic*_*nic 5

原因是您没有ResultSet通过next()在使用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));
}
Run Code Online (Sandbox Code Playgroud)

如果要遍历整个结果集,请while (rs.next())改用。

您的第二个代码段有效,因为您rs.last()在第一次访问列值之前将光标移动到最后一个位置。

请注意,你总是应该检查返回值rs.next()/ rs.last()/rs.first()访问的列值之前的方法。falsey 返回值表示结果集没有行,并且在调用结果集的任何 getter(rs.getInt()/rs.getString()等)方法时会导致抛出异常。