JDBC - 資料排序



本章提供了一個使用 JDBC 應用程式對錶中的記錄進行排序的示例。它將使用ascdesc關鍵字對記錄進行升序或降序排序。在執行以下示例之前,請確保您已準備好以下內容:-

  • 要執行以下示例,您可以將使用者名稱密碼替換為您實際的使用者名稱和密碼。

  • 您的 MySQL 或您正在使用的任何資料庫都已啟動並正在執行。

必要步驟

使用 JDBC 應用程式建立新資料庫需要以下步驟:-

  • 匯入包 - 需要包含用於資料庫程式設計的 JDBC 類所在的包。大多數情況下,使用import java.sql.*就足夠了。

  • 開啟連線 - 需要使用DriverManager.getConnection()方法建立一個 Connection 物件,該物件表示與資料庫伺服器的物理連線。

  • 執行查詢 - 需要使用 Statement 型別的物件來構建和提交 SQL 語句以對錶中的記錄進行排序。這些查詢利用ascdesc子句對資料進行升序和降序排序。

  • 清理環境 - try with resources 自動關閉資源。

示例:對錶的記錄進行排序

在此示例中,我們有四個靜態字串,分別包含資料庫連線 URL、使用者名稱、密碼和 SELECT 查詢。現在使用 DriverManager.getConnection() 方法,我們準備了一個數據庫連線。連線準備就緒後,我們使用 createStatement() 方法準備了一個 Statement 物件。下一步,我們準備並執行了對 REGISTRATION 表的 SELECT 查詢,方法是呼叫 statement.executeQuery() 方法,在該方法中我們添加了對姓名的升序排序 Order By 子句。然後使用 executeQuery(),所有記錄都被獲取並存儲在 ResultSet 物件中。迭代 ResultSet 並列印所有記錄。

下一步,我們準備並執行了對 REGISTRATION 表的 SELECT 查詢,方法是呼叫 statement.executeQuery() 方法,在該方法中我們添加了對姓名的降序排序 Order By 子句。然後使用 executeQuery(),所有記錄都被獲取並存儲在 ResultSet 物件中。迭代 ResultSet 並列印所有記錄。

將以下示例複製並貼上到 JDBCExample.java 中,編譯並執行如下:-

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

public class JDBCExample {
   static final String DB_URL = "jdbc:mysql:///TUTORIALSPOINT";
   static final String USER = "guest";
   static final String PASS = "guest123";
   static final String QUERY = "SELECT id, first, last, age FROM Registration";

   public static void main(String[] args) {
      // Open a connection
      try(Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         Statement stmt = conn.createStatement();) {		      
         System.out.println("Fetching records in ascending order...");
         ResultSet rs = stmt.executeQuery(QUERY + " ORDER BY first ASC");
         while(rs.next()){
            //Display values
            System.out.print("ID: " + rs.getInt("id"));
            System.out.print(", Age: " + rs.getInt("age"));
            System.out.print(", First: " + rs.getString("first"));
            System.out.println(", Last: " + rs.getString("last"));
         }

         System.out.println("Fetching records in descending order...");
         rs = stmt.executeQuery(QUERY + " ORDER BY first DESC");
         while(rs.next()){
            //Display values
            System.out.print("ID: " + rs.getInt("id"));
            System.out.print(", Age: " + rs.getInt("age"));
            System.out.print(", First: " + rs.getString("first"));
            System.out.println(", Last: " + rs.getString("last"));
         }
         rs.close();
      } catch (SQLException e) {
         e.printStackTrace();
      } 
   }
}

現在讓我們編譯以上示例,如下所示:-

C:\>javac JDBCExample.java
C:\>

當您執行JDBCExample時,它會產生以下結果:-

C:\>java JDBCExample
Fetching records in ascending order...
ID: 103, Age: 28, First: Sumit, Last: Mittal
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 100, Age: 30, First: Zara, Last: Ali
Fetching records in descending order...
ID: 100, Age: 30, First: Zara, Last: Ali
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>

示例:對錶的記錄基於兩列進行排序

在此示例中,我們有三個靜態字串,分別包含資料庫連線 URL、使用者名稱和密碼。現在使用 DriverManager.getConnection() 方法,我們準備了一個數據庫連線。連線準備就緒後,我們使用 createStatement() 方法準備了一個 Statement 物件。下一步,我們準備並執行了對 EMPLOYEES 表的 SELECT 查詢,方法是呼叫 statement.executeQuery() 方法,在該方法中我們添加了對 id 和 age 的升序排序 Order By 子句。然後使用 executeQuery(),所有記錄都被獲取並存儲在 ResultSet 物件中。迭代 ResultSet 並列印所有記錄。

將以下示例複製並貼上到 JDBCExample.java 中,編譯並執行如下:-

import java.sql.*;

// This class demonstrates use ORDER BY with 2 columns.
public class JDBCExample {

   static final String DB_URL = "jdbc:mysql:///TUTORIALSPOINT";
   static final String USER = "root";
   static final String PASS = "guest123";

   public static void main(String args[]) {
      try{
         Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         Statement stmt = conn.createStatement();
         String sel_qry = " select * from employees order by id, age ";
         ResultSet rs = stmt.executeQuery(sel_qry);
         System.out.println("Displaying records from EMPLOYEES table sorted by id, age" );
         System.out.println("-------------------------------------------------------");
         while(rs.next()){
            System.out.print(" ID: " + rs.getInt(1));
            System.out.print(", AGE: " + rs.getInt(2));
            System.out.print(", FirstName: " + rs.getString(3));
            System.out.println(", LastName: " + rs.getString(4));
         }
         System.out.println("--------------------------------------------");
         rs.close();
         stmt.close();
         conn.close();
      }catch(SQLException e){
         e.printStackTrace();
      }
   }
}

現在讓我們編譯以上示例,如下所示:-

C:\>javac JDBCExample.java
C:\>

當您執行JDBCExample時,它會產生以下結果:-

C:\>java JDBCExample
Displaying records from EMPLOYEES table sorted by id, age
-------------------------------------------------------
 ID: 1, AGE: 50, FirstName: Shahbaz, LastName: Ali
 ID: 2, AGE: 25, FirstName: Mahnaz, LastName: Fatma
 ID: 4, AGE: 28, FirstName: Sumit, LastName: Mittal
 ID: 21, AGE: 35, FirstName: Jeevan, LastName: Rao
 ID: 22, AGE: 40, FirstName: Dinesh, LastName: Kumar
 ID: 25, AGE: 35, FirstName: Jeevan, LastName: Rao
 ID: 26, AGE: 35, FirstName: Aditya, LastName: Chaube
 ID: 34, AGE: 45, FirstName: Ahmed, LastName: Ali
 ID: 35, AGE: 51, FirstName: Raksha, LastName: Agarwal
--------------------------------------------

C:\>

示例:對錶的記錄進行升序和降序排序

在此示例中,我們有三個靜態字串,分別包含資料庫連線 URL、使用者名稱和密碼。現在使用 DriverManager.getConnection() 方法,我們準備了一個數據庫連線。連線準備就緒後,我們使用 createStatement() 方法準備了一個 Statement 物件。下一步,我們準備並執行了對 EMPLOYEES 表的 SELECT 查詢,方法是呼叫 statement.executeQuery() 方法,在該方法中我們添加了對 age 的升序排序和對姓氏的降序排序 Order By 子句。然後使用 executeQuery(),所有記錄都被獲取並存儲在 ResultSet 物件中。迭代 ResultSet 並列印所有記錄。

將以下示例複製並貼上到 JDBCExample.java 中,編譯並執行如下:-

import java.sql.*;

// This class demonstrates ORDER BY 2 columns one ASC, one DESC
public class JDBCExample {

   static final String DB_URL = "jdbc:mysql:///TUTORIALSPOINT";
   static final String USER = "root";
   static final String PASS = "guest123";

   public static void main(String args[]) {
      try{
         Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         Statement stmt = conn.createStatement();
         String sel_qry = " select * from employees order by age asc, last desc";
         ResultSet rs = stmt.executeQuery(sel_qry);
         System.out.println("Displaying records from EMPLOYEES table sorted by age(ASC) and last name (DESC)." );
         System.out.println("-------------------------------------------------------");
         while(rs.next()){
            System.out.print(" ID: " + rs.getInt(1));
            System.out.print(", AGE: " + rs.getInt(2));
            System.out.print(", FirstName: " + rs.getString(3));
            System.out.println(", LastName: " + rs.getString(4));
         }          
         System.out.println("--------------------------------------------");
         rs.close();
         stmt.close();
         conn.close();           
      }catch(SQLException e){
         e.printStackTrace();
      }
   }
}

現在讓我們編譯以上示例,如下所示:-

C:\>javac JDBCExample.java
C:\>

當您執行JDBCExample時,它會產生以下結果:-

C:\>java JDBCExample
Displaying records from EMPLOYEES table sorted by age(ASC) and last name (DESC).
-------------------------------------------------------
 ID: 2, AGE: 25, FirstName: Mahnaz, LastName: Fatma
 ID: 4, AGE: 28, FirstName: Sumit, LastName: Mittal
 ID: 21, AGE: 35, FirstName: Jeevan, LastName: Rao
 ID: 25, AGE: 35, FirstName: Jeevan, LastName: Rao
 ID: 26, AGE: 35, FirstName: Aditya, LastName: Chaube
 ID: 22, AGE: 40, FirstName: Dinesh, LastName: Kumar
 ID: 34, AGE: 45, FirstName: Ahmed, LastName: Ali
 ID: 1, AGE: 50, FirstName: Shahbaz, LastName: Ali
 ID: 35, AGE: 51, FirstName: Raksha, LastName: Agarwal
--------------------------------------------


C:\>
廣告

© . All rights reserved.