- H2資料庫教程
- H2資料庫 - 首頁
- H2資料庫 - 簡介
- H2資料庫 - 安裝
- H2資料庫 - 資料操作
- H2資料庫 - 查詢
- H2資料庫 - 插入
- H2資料庫 - 更新
- H2資料庫 - 刪除
- H2資料庫 - 備份
- H2資料庫 - 呼叫
- H2資料庫 - 解釋
- H2資料庫 - 合併
- H2資料庫 - 顯示
- H2資料庫 - 資料定義
- H2資料庫 - 建立
- H2資料庫 - 修改
- H2資料庫 - 刪除
- H2資料庫 - 截斷
- H2資料庫 - 提交
- H2資料庫 - 授權
- H2資料庫 - 儲存點
- H2資料庫 - 回滾
- H2資料庫 - JDBC連線
- H2資料庫有用資源
- H2資料庫 - 快速指南
- H2資料庫 - 有用資源
- H2資料庫 - 討論
H2資料庫 - JDBC連線
H2是一個JAVA資料庫。我們可以使用JDBC與該資料庫進行互動。在本章中,我們將瞭解如何使用JDBC連線H2資料庫以及對H2資料庫進行CRUD操作。
通常,建立JDBC連線需要五個步驟。
步驟1 - 註冊JDBC資料庫驅動程式。
Class.forName ("org.h2.Driver");
步驟2 - 開啟連線。
Connection conn = DriverManager.getConnection ("jdbc:h2:~/test", "sa","");
步驟3 - 建立語句。
Statement st = conn.createStatement();
步驟4 - 執行語句並接收結果集。
Stmt.executeUpdate("sql statement");
步驟5 - 關閉連線。
conn.close();
在繼續建立完整程式之前,我們需要將h2-1.4.192.jar檔案新增到CLASSPATH。我們可以從C:\Program Files (x86)\H2\bin資料夾獲取此jar檔案。
建立表
在這個例子中,我們將編寫一個建立表的程式。考慮一個名為Registration的表,它包含以下欄位。
| 序號 | 列名 | 資料型別 | 非空 | 主鍵 |
|---|---|---|---|---|
| 1 | ID | 數字 | 是 | 是 |
| 2 | 名 | Varchar(255) | 否 | 否 |
| 3 | 姓 | Varchar(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介面檢查建立的表。
插入記錄
在這個例子中,我們將編寫一個插入記錄的程式。讓我們將以下記錄插入到Registration表中。
| ID | 名 | 姓 | 年齡 |
|---|---|---|---|
| 100 | Zara | Ali | 18 |
| 101 | Mahnaz | Fatma | 25 |
| 102 | Zaid | Khan | 30 |
| 103 | Sumit | 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!