2015-10-07 23 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):) –