JDBC - 建立表



本章提供使用 JDBC 應用程式建立表、臨時表和複製表的示例。在執行以下示例之前,請確保已準備好以下內容:

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

  • 您的 MySQL 正在執行。

必要步驟

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

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

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

  • 執行查詢 - 需要使用 Statement 型別的物件來構建和提交 SQL 語句,以便在選定的資料庫中建立一個表。

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

示例:建立表

在本例中,我們有三個靜態字串,包含資料庫連線 URL、使用者名稱、密碼。現在使用 DriverManager.getConnection() 方法,我們準備了一個數據庫連線。連線準備就緒後,我們使用 createStatement() 方法準備了一個 Statement 物件。下一步,我們準備了一個 SQL 字串來建立一個新的 REGISTRATION 表,並透過呼叫 statement.executeUpdate() 方法在資料庫中建立了該表。

如果在連線到資料庫時發生任何異常,catch 塊將處理 SQLException 並列印堆疊跟蹤。

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

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

public class TestApplication {
   static final String DB_URL = "jdbc:mysql:///TUTORIALSPOINT";
   static final String USER = "guest";
   static final String PASS = "guest123";

   public static void main(String[] args) {
      // Open a connection
      try(Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         Statement stmt = conn.createStatement();
      ) {		      
          String sql = "CREATE TABLE REGISTRATION " +
                   "(id INTEGER not NULL, " +
                   " first VARCHAR(255), " + 
                   " last VARCHAR(255), " + 
                   " age INTEGER, " + 
                   " PRIMARY KEY ( id ))"; 

         stmt.executeUpdate(sql);
         System.out.println("Created table in given database...");   	  
      } catch (SQLException e) {
         e.printStackTrace();
      } 
   }
}

現在讓我們按照如下方式編譯上述示例:

C:\>javac TestApplication.java
C:\>

執行TestApplication時,會產生以下結果:

C:\>java TestApplication
Created table in given database...
C:\>

示例:建立臨時表

我們可以建立一個臨時表,該表僅在活動會話期間存在。MySQL、SQL Server、Oracle 等都支援臨時表。

在本例中,我們有三個靜態字串,包含資料庫連線 URL、使用者名稱、密碼。現在使用 DriverManager.getConnection() 方法,我們準備了一個數據庫連線。連線準備就緒後,我們使用 createStatement() 方法準備了一個 Statement 物件。下一步,我們準備了一個 SQL 字串來建立一個新的臨時表 EMPLOYEES_COPY,並透過呼叫 statement.execute() 方法在資料庫中建立了該表。

在下一行程式碼中,我們建立了一個查詢字串以獲取新建立的臨時表 EMPLOYEES_COPY 中的所有記錄。查詢使用 statement.executeQuery() 方法觸發,結果儲存在 ResultSet 中。迭代 ResultSet 以列印所有員工。

如果在連線到資料庫時發生任何異常,catch 塊將處理 SQLException 並列印堆疊跟蹤。

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

import java.sql.*;

public class TestApplication {

   static final String DB_URL = "jdbc:mysql:///TUTORIALSPOINT";
   static final String USER = "guest";
   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 QUERY1 = "CREATE TEMPORARY TABLE EMPLOYEES_COPY SELECT * FROM EMPLOYEES";
         stmt.execute(QUERY1);
         String QUERY2 = "SELECT * FROM EMPLOYEES_COPY";
         ResultSet rs = stmt.executeQuery(QUERY2);

         while (rs.next()){
            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("------------------------------------------");
         }
      }catch (SQLException e){
         e.printStackTrace();
      }       
   }
}

現在讓我們按照如下方式編譯上述示例:

C:\>javac TestApplication.java
C:\>

執行TestApplication時,會產生以下結果:

C:\>java TestApplication
Id: 1 Age: 18 First: Zara Last: Ali
------------------------------------------
Id: 2 Age: 25 First: Mahnaz Last: Fatma
------------------------------------------
Id: 3 Age: 20 First: Zaid Last: Khan
------------------------------------------
Id: 4 Age: 28 First: Sumit Last: Mittal
------------------------------------------
Id: 7 Age: 20 First: Rita Last: Tez
-----------------------------------------
Id: 8 Age: 20 First: Sita Last: Singh
------------------------------------------
Id: 21 Age: 35 First: Jeevan Last: Rao
------------------------------------------
Id: 22 Age: 40 First: Aditya Last: Chaube
------------------------------------------
Id: 25 Age: 35 First: Jeevan Last: Rao
------------------------------------------
Id: 26 Age: 35 First: Aditya Last: Chaube
------------------------------------------
Id: 34 Age: 45 First: Ahmed Last: Ali
------------------------------------------
Id: 35 Age: 50 First: Raksha Last: Agarwal
------------------------------------------
C:\>

示例:建立複製表

我們可以建立一個與現有表完全相同的表。語法為

CREATE new_table_name LIKE orig_table_name;

執行該命令後,原始表中的所有資料都將複製到新表中。

在本例中,我們有三個靜態字串,包含資料庫連線 URL、使用者名稱、密碼。現在使用 DriverManager.getConnection() 方法,我們準備了一個數據庫連線。連線準備就緒後,我們使用 createStatement() 方法準備了一個 Statement 物件。下一步,我們準備了一個 SQL 字串來建立一個新的複製表 EMPLOYEES_O,並透過呼叫 statement.execute() 方法在資料庫中建立了該表。

在下一行程式碼中,我們建立了一個查詢字串以獲取新建立的複製表 EMPLOYEES_O 中的所有記錄。查詢使用 statement.executeQuery() 方法觸發,結果儲存在 ResultSet 中。迭代 ResultSet 以列印所有員工。

如果在連線到資料庫時發生任何異常,catch 塊將處理 SQLException 並列印堆疊跟蹤。

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

import java.sql.*;
// This class demonstrates the way of creating a table which is exactly similar to another table.        
public class TestApplication {

   static final String DB_URL = "jdbc:mysql:///TUTORIALSPOINT";
   static final String USER = "guest";
   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 QUERY1 = "CREATE TABLE EMPLOYEES_O LIKE EMPLOYEES";            
         stmt.execute(QUERY1);

         ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES");            

         System.out.println("Displaying records from EMPLOYEES_O");

         while (rs.next()){

            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("------------------------------------------");
         }

      }catch(SQLException e){
         e.printStackTrace();
      }
   }
}

現在讓我們按照如下方式編譯上述示例:

C:\>javac TestApplication.java
C:\>

執行TestApplication時,會產生以下結果:

C:\>java TestApplication
Displaying records from EMPLOYEES_O
Id: 1 Age: 18 First: Zara Last: Ali
------------------------------------------
Id: 2 Age: 25 First: Mahnaz Last: Fatma
------------------------------------------
Id: 3 Age: 20 First: Zaid Last: Khan
------------------------------------------
Id: 4 Age: 28 First: Sumit Last: Mittal
------------------------------------------
Id: 7 Age: 20 First: Rita Last: Tez
------------------------------------------
Id: 8 Age: 20 First: Sita Last: Singh
------------------------------------------
Id: 21 Age: 35 First: Jeevan Last: Rao
------------------------------------------
Id: 22 Age: 40 First: Aditya Last: Chaube
-----------------------------------------
Id: 25 Age: 35 First: Jeevan Last: Rao
------------------------------------------
Id: 26 Age: 35 First: Aditya Last: Chaube
------------------------------------------
Id: 34 Age: 45 First: Ahmed Last: Ali
------------------------------------------
Id: 35 Age: 50 First: Raksha Last: Agarwal
------------------------------------------
C:\>
廣告

© . All rights reserved.