2015-10-07 55 views
2

现在我正在学习java中的ResultSet类型。在这里,我编码以不同的方式查看记录。起初,我显示了emp4表中的全部记录,然后我开始以不同的方式查看这些记录(最后一个,下一个)。这正是我正在寻找的内容,但它不会显示提交的所有记录在emp4表中。看到第一个程序它不起作用,但如果我记录了第41行(见第二个程序),它只是工作真棒。有什么问题 ?有没有我的代码错了?在JDBC中查看ResultSet时不检索记录

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

      } 
     } 
    } 
} 

输出

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

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

显示记录ID:2 GMAIL:ajithvirje YAHOO:ajith234

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

下面的图像表示emp4表

enter image description here

+0

如何向我们展示堆栈跟踪或第一个代码的输出不正确运行? –

+0

是的,它不工作。它只是显示了一个像这样的异常“java.sql.SQLException:结果集开始之前”,但如果我评论第41行,那么它没有任何问题......但我想提取这些数据,并希望在去之前显示它以执行操作(最后,第一,下一个) –

回答

4

以下记录的原因是,你还没有与getInt()/getString()访问数据之前调用next()进步的ResultSet的光标。尝试这样的事情,而不是:

//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.last()

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

+0

非常感谢你.....这真的很好,这是我所期待的现在它没有任何问题,但我怀疑? 为什么它不适用于我已发布的该行,但它只适用于while或if?为什么?两者是相同的只知道?或不 ? –

+1

我编辑了这个问题来解释为什么你的第二个代码示例正在工作。基本上,对ResultSet的'getX'方法的任何调用都需要在移动游标的方法之前进行。 –

+0

这可以帮助我很多。再次感谢您的帮助! –

1

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

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

感谢您的努力... –

+0

欢迎bro(y):) –