ฐานข้อมูล H2 - การเชื่อมต่อ JDBC

H2 เป็นฐานข้อมูล JAVA เราสามารถโต้ตอบกับฐานข้อมูลนี้โดยใช้ JDBC ในบทนี้เราจะดูวิธีสร้างการเชื่อมต่อ JDBC กับฐานข้อมูล H2 และการดำเนินการ CRUD กับฐานข้อมูล H2

โดยทั่วไปมีห้าขั้นตอนในการสร้างการเชื่อมต่อ JDBC

Step 1 - การลงทะเบียนไดรเวอร์ฐานข้อมูล JDBC

Class.forName ("org.h2.Driver");

Step 2 - การเปิดการเชื่อมต่อ

Connection conn = DriverManager.getConnection ("jdbc:h2:~/test", "sa","");

Step 3 - การสร้างคำสั่ง

Statement st = conn.createStatement();

Step 4 - ดำเนินการคำสั่งและรับ Resultset

Stmt.executeUpdate("sql statement");

Step 5 - การปิดการเชื่อมต่อ

conn.close();

ก่อนที่จะดำเนินการสร้างโปรแกรมเต็มเราจำเป็นต้องเพิ่ม h2-1.4.192.jar fileเป็น CLASSPATH เราจะได้รับสิ่งนี้jar จากโฟลเดอร์ C:\Program Files (x86)\H2\bin.

สร้างตาราง

ในตัวอย่างนี้เราจะเขียนโปรแกรมสำหรับสร้างตาราง พิจารณาตารางที่มีชื่อว่าRegistration มีฟิลด์ต่อไปนี้

ส. เลขที่ ชื่อคอลัมน์ ประเภทข้อมูล ไม่เป็นโมฆะ คีย์หลัก
1 ID จำนวน ใช่ ใช่
2 อันดับแรก วาร์ชาร์ (255) ไม่ ไม่
3 ล่าสุด วาร์ชาร์ (255) ไม่ ไม่
4 อายุ จำนวน ไม่ ไม่

ต่อไปนี้เป็นโปรแกรมตัวอย่างชื่อ H2jdbcCreateDemo.

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

public class H2jdbcCreateDemo { 
   // JDBC driver name and database URL 
   static final String JDBC_DRIVER = "org.h2.Driver";   
   static final String DB_URL = "jdbc:h2:~/test";  
   
   //  Database credentials 
   static final String USER = "sa"; 
   static final String PASS = ""; 
  
   public static void main(String[] args) { 
      Connection conn = null; 
      Statement stmt = null; 
      try { 
         // STEP 1: Register JDBC driver 
         Class.forName(JDBC_DRIVER); 
             
         //STEP 2: Open a connection 
         System.out.println("Connecting to database..."); 
         conn = DriverManager.getConnection(DB_URL,USER,PASS);  
         
         //STEP 3: Execute a query 
         System.out.println("Creating table in given database..."); 
         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..."); 
         
         // STEP 4: Clean-up environment 
         stmt.close(); 
         conn.close(); 
      } catch(SQLException se) { 
         //Handle errors for JDBC 
         se.printStackTrace(); 
      } catch(Exception e) { 
         //Handle errors for Class.forName 
         e.printStackTrace(); 
      } finally { 
         //finally block used to close resources 
         try{ 
            if(stmt!=null) stmt.close(); 
         } catch(SQLException se2) { 
         } // nothing we can do 
         try { 
            if(conn!=null) conn.close(); 
         } catch(SQLException se){ 
            se.printStackTrace(); 
         } //end finally try 
      } //end try 
      System.out.println("Goodbye!");
   } 
}

บันทึกโปรแกรมข้างต้นลงใน H2jdbcCreateDemo.java คอมไพล์และรันโปรแกรมข้างต้นโดยดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง

\>javac H2jdbcCreateDemo.java 
\>java H2jdbcCreateDemo

คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้

Connecting to database... 
Creating table in given database... 
Created table in given database... 
Goodbye!

หลังจากการดำเนินการนี้เราสามารถตรวจสอบตารางที่สร้างโดยใช้อินเทอร์เฟซ H2 SQL

แทรกบันทึก

ในตัวอย่างนี้เราจะเขียนโปรแกรมสำหรับแทรกระเบียน ให้เราใส่บันทึกต่อไปนี้ลงในตารางการลงทะเบียน

ID อันดับแรก ล่าสุด อายุ
100 ซาร่า อาลี 18
101 มาห์นาซ แฟตมา 25
102 Zaid ข่าน 30
103 สุมิตร Mital 28

ต่อไปนี้เป็นโปรแกรมตัวอย่างชื่อ H2jdbcInsertDemo.

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

public class H2jdbcInsertDemo { 
   // JDBC driver name and database URL 
   static final String JDBC_DRIVER = "org.h2.Driver";   
   static final String DB_URL = "jdbc:h2:~/test";  
   
   //  Database credentials 
   static final String USER = "sa"; 
   static final String PASS = ""; 
  
   public static void main(String[] args) { 
      Connection conn = null; 
      Statement stmt = null; 
      try{
         // STEP 1: Register JDBC driver 
         Class.forName(JDBC_DRIVER);  
         
         // STEP 2: Open a connection 
         System.out.println("Connecting to a selected database..."); 
         conn = DriverManager.getConnection(DB_URL,USER,PASS); 
         System.out.println("Connected database successfully..."); 
         
         // STEP 3: Execute a query 
         stmt = conn.createStatement();  
         String sql = "INSERT INTO Registration " + "VALUES (100, 'Zara', 'Ali', 18)"; 
         
         stmt.executeUpdate(sql); 
         sql = "INSERT INTO Registration " + "VALUES (101, 'Mahnaz', 'Fatma', 25)";  
         
         stmt.executeUpdate(sql); 
         sql = "INSERT INTO Registration " + "VALUES (102, 'Zaid', 'Khan', 30)"; 
         
         stmt.executeUpdate(sql); 
         sql = "INSERT INTO Registration " + "VALUES(103, 'Sumit', 'Mittal', 28)"; 
         
         stmt.executeUpdate(sql); 
         System.out.println("Inserted records into the table..."); 
         
         // STEP 4: Clean-up environment 
         stmt.close(); 
         conn.close(); 
      } catch(SQLException se) { 
         // Handle errors for JDBC 
         se.printStackTrace(); 
      } catch(Exception e) { 
         // Handle errors for Class.forName 
         e.printStackTrace(); 
      } finally { 
         // finally block used to close resources 
         try {
            if(stmt!=null) stmt.close();  
         } catch(SQLException se2) { 
         } // nothing we can do 
         try { 
            if(conn!=null) conn.close(); 
         } catch(SQLException se) { 
            se.printStackTrace(); 
         } // end finally try 
      } // end try 
      System.out.println("Goodbye!"); 
   } 
}

บันทึกโปรแกรมข้างต้นลงใน H2jdbcInsertDemo.java คอมไพล์และรันโปรแกรมข้างต้นโดยดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง

\>javac H2jdbcInsertDemo.java 
\>java H2jdbcInsertDemo

คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้

Connecting to a selected database... 
Connected database successfully... 
Inserted records into the table... 
Goodbye!

อ่านบันทึก

ในตัวอย่างนี้เราจะเขียนโปรแกรมสำหรับการอ่านบันทึก ให้เราพยายามอ่านบันทึกทั้งหมดจากตารางRegistration.

ต่อไปนี้เป็นโปรแกรมตัวอย่างชื่อ H2jdbcRecordDemo.

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

public class H2jdbcReadDemo { 
   // JDBC driver name and database URL 
   static final String JDBC_DRIVER = "org.h2.Driver";   
   static final String DB_URL = "jdbc:h2:~/test";  
   
   //  Database credentials 
   static final String USER = "sa"; 
   static final String PASS = ""; 
   
   public static void main(String[] args) { 
      Connection conn = null; 
      Statement stmt = null; 
      try { 
         // STEP 1: Register JDBC driver 
         Class.forName(JDBC_DRIVER); 
         
         // STEP 2: Open a connection 
         System.out.println("Connecting to database..."); 
         conn = DriverManager.getConnection(DB_URL,USER,PASS);  
         
         // STEP 3: Execute a query 
         System.out.println("Connected database successfully..."); 
         stmt = conn.createStatement(); 
         String sql = "SELECT id, first, last, age FROM Registration"; 
         ResultSet rs = stmt.executeQuery(sql); 
         
         // STEP 4: Extract data from result set 
         while(rs.next()) { 
            // Retrieve by column name 
            int id  = rs.getInt("id"); 
            int age = rs.getInt("age"); 
            String first = rs.getString("first"); 
            String last = rs.getString("last");  
            
            // Display values 
            System.out.print("ID: " + id); 
            System.out.print(", Age: " + age); 
            System.out.print(", First: " + first); 
            System.out.println(", Last: " + last); 
         } 
         // STEP 5: Clean-up environment 
         rs.close(); 
      } catch(SQLException se) { 
         // Handle errors for JDBC 
         se.printStackTrace(); 
      } catch(Exception e) { 
         // Handle errors for Class.forName 
         e.printStackTrace(); 
      } finally { 
         // finally block used to close resources 
         try { 
            if(stmt!=null) stmt.close();  
         } catch(SQLException se2) { 
         } // nothing we can do 
         try { 
            if(conn!=null) conn.close(); 
         } catch(SQLException se) { 
            se.printStackTrace(); 
         } // end finally try 
      } // end try 
      System.out.println("Goodbye!"); 
   } 
}

บันทึกโปรแกรมข้างต้นลงใน H2jdbcReadDemo.java คอมไพล์และรันโปรแกรมข้างต้นโดยดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง

\>javac H2jdbcReadDemo.java 
\>java H2jdbcReadDemo

คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้

Connecting to a selected database... 
Connected database successfully... 
ID: 100, Age: 18, First: Zara, Last: Ali 
ID: 101, Age: 25, First: Mahnaz, Last: Fatma 
ID: 102, Age: 30, First: Zaid, Last: Khan 
ID: 103, Age: 28, First: Sumit, Last: Mittal 
Goodbye!

อัปเดตบันทึก

ในตัวอย่างนี้เราจะเขียนโปรแกรมเพื่อปรับปรุงระเบียน ให้เราพยายามอ่านบันทึกทั้งหมดจากตารางRegistration.

ต่อไปนี้เป็นโปรแกรมตัวอย่างชื่อ H2jdbcUpdateDemo.

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

public class H2jdbcUpdateDemo { 
   // JDBC driver name and database URL 
   static final String JDBC_DRIVER = "org.h2.Driver";   
   static final String DB_URL = "jdbc:h2:~/test";  
   
   // Database credentials 
   static final String USER = "sa"; 
   static final String PASS = ""; 
   
   public static void main(String[] args) { 
      Connection conn = null; 
      Statement stmt = null; 
      try { 
         // STEP 1: Register JDBC driver 
         Class.forName(JDBC_DRIVER); 
         
         // STEP 2: Open a connection 
         System.out.println("Connecting to a database..."); 
         conn = DriverManager.getConnection(DB_URL,USER,PASS);  
         
         // STEP 3: Execute a query 
         System.out.println("Connected database successfully..."); 
         stmt = conn.createStatement(); 
         String sql = "UPDATE Registration " + "SET age = 30 WHERE id in (100, 101)"; 
         stmt.executeUpdate(sql);  
         
         // Now you can extract all the records 
         // to see the updated records 
         sql = "SELECT id, first, last, age FROM Registration"; 
         ResultSet rs = stmt.executeQuery(sql);  
         
         while(rs.next()){ 
            // Retrieve by column name 
            int id  = rs.getInt("id"); 
            int age = rs.getInt("age"); 
            String first = rs.getString("first"); 
            String last = rs.getString("last");  
            
            // Display values 
            System.out.print("ID: " + id); 
            System.out.print(", Age: " + age); 
            System.out.print(", First: " + first); 
            System.out.println(", Last: " + last); 
         } 
         rs.close();    
      } catch(SQLException se) { 
         // Handle errors for JDBC 
         se.printStackTrace(); 
      } catch(Exception e) { 
         // Handle errors for Class.forName 
         e.printStackTrace(); 
      } finally { 
         // finally block used to close resources  
         try { 
            if(stmt!=null) stmt.close(); 
         } catch(SQLException se2) { 
         } // nothing we can do 
         try { 
            if(conn!=null) conn.close(); 
         } catch(SQLException se) { 
            se.printStackTrace(); 
         } // end finally try 
      } // end try 
      System.out.println("Goodbye!"); 
   } 
}

บันทึกโปรแกรมข้างต้นลงใน H2jdbcUpdateDemo.java คอมไพล์และรันโปรแกรมข้างต้นโดยดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง

\>javac H2jdbcUpdateDemo.java 
\>java H2jdbcUpdateDemo

คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้

Connecting to a selected database... 
Connected database successfully... 
ID: 100, Age: 30, First: Zara, Last: Ali 
ID: 101, Age: 30, First: Mahnaz, Last: Fatma 
ID: 102, Age: 30, First: Zaid, Last: Khan 
ID: 103, Age: 28, First: Sumit, Last: Mittal 
Goodbye!

ลบบันทึก

ในตัวอย่างนี้เราจะเขียนโปรแกรมเพื่อลบบันทึก ให้เราพยายามอ่านบันทึกทั้งหมดจากตารางRegistration.

ต่อไปนี้เป็นโปรแกรมตัวอย่างชื่อ H2jdbcDeleteDemo.

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

public class H2jdbcDeleteDemo { 
   // JDBC driver name and database URL 
   static final String JDBC_DRIVER = "org.h2.Driver";   
   static final String DB_URL = "jdbc:h2:~/test";  
   
   // Database credentials 
   static final String USER = "sa"; 
   static final String PASS = ""; 
  
   public static void main(String[] args) { 
      Connection conn = null; 
      Statement stmt = null; 
      try { 
         // STEP 1: Register JDBC driver 
         Class.forName(JDBC_DRIVER);  
         
         // STEP 2: Open a connection 
         System.out.println("Connecting to database..."); 
         conn = DriverManager.getConnection(DB_URL,USER,PASS);  
         
         // STEP 3: Execute a query
         System.out.println("Creating table in given database..."); 
         stmt = conn.createStatement();  
         String sql = "DELETE FROM Registration " + "WHERE id = 101"; 
         stmt.executeUpdate(sql);  
         
         // Now you can extract all the records 
         // to see the remaining records 
         sql = "SELECT id, first, last, age FROM Registration"; 
         ResultSet rs = stmt.executeQuery(sql);  
         
         while(rs.next()){ 
            // Retrieve by column name 
            int id  = rs.getInt("id"); 
            int age = rs.getInt("age"); 
            String first = rs.getString("first"); 
            String last = rs.getString("last");  
            
            // Display values 
            System.out.print("ID: " + id); 
            System.out.print(", Age: " + age); 
            System.out.print(", First: " + first); 
            System.out.println(", Last: " + last); 
         } 
         rs.close(); 
      } catch(SQLException se) { 
         // Handle errors for JDBC 
         se.printStackTrace();  
      } catch(Exception e) { 
         // Handle errors for Class.forName 
         e.printStackTrace(); 
      } finally { 
         // finally block used to close resources 
         try { 
            if(stmt!=null) stmt.close(); 
         } catch(SQLException se2) { 
         } // nothing we can do 
         try { 
            if(conn!=null) conn.close(); 
         } catch(SQLException se) { 
            se.printStackTrace(); 
         } // end finally try
      } // end try 
      System.out.println("Goodbye!"); 
   } 
}

บันทึกโปรแกรมข้างต้นลงใน H2jdbcDeleteDemo.java คอมไพล์และรันโปรแกรมข้างต้นโดยดำเนินการคำสั่งต่อไปนี้ในพรอมต์คำสั่ง

\>javac H2jdbcDeleteDemo.java 
\>java H2jdbcDeleteDemo

คำสั่งดังกล่าวสร้างผลลัพธ์ต่อไปนี้

Connecting to a selected database... 
Connected database successfully... 
ID: 100, Age: 30, First: Zara, Last: Ali 
ID: 102, Age: 30, First: Zaid, Last: Khan 
ID: 103, Age: 28, First: Sumit, Last: Mittal 
Goodbye!