學習 JDBC 的時候,我們首先應該瞭解一些基礎知識點:
1、JDBC 全稱:Java DataBase Connectivity
2、數據庫本身是個獨立運行的程序,我們編寫的應用程序是利用通信協議對數據庫進行指令交換。
3、JDBC 是用於執行 SQL 的解決方法,開發人員使用 JDBC 的標準接口,數據庫廠商則對數據庫接口進行操作,開發人員無須接觸底層數據庫驅動程序的差異性。
4、JDBC API 由類和接口構成,這些類和接口用於:建立數據庫的連接,把 SQL 語句發送到數據庫,處理 SQL 語句的結果,以及獲取數據庫的元數據。
5、使用 JDBC 開發任何有關於數據庫的應用程序,都需要注意四個主要接口:Driver、Connection、Statement、ResultSet ,這些接口定義使用 SQL 訪問數據庫的一般架構。訪問數據庫的典型 Java 程序主要採用下列步驟:
(1)、加載驅動程序(使用 Driver 接口裝載一個合適的驅動程序)
(2)、建立連接(使用 Connection 接口連接到數據庫)
(3)、創建和執行語句(使用 Statement 接口創建和執行 SQL 語句)
(4)、處理結果(如果語句返回數據集結果,可以使用 ResultSet 接口處理該結果)
6、com.mysql.jdbc.Driver 是 mysqljdbc.jar 中的一個類,oracle.jdbc.driver.OracleDriver 是 classes12.jar 中的一個類,mysqljdbc.jar 和 classes12.jar 包含許多支持驅動程序的類,這些類由 JDBC 使用,但不是直接由 JDBC 程序員使用。當我們在程序中明確使用某個類時,他被 JVM 自動加載,但驅動程序沒有在程序中明確地使用,因此,我們必須編寫代碼告訴 JVM 加載它們。
JDBC 連接 MySql 數據庫 實例:
首先在 MySql 中的 test 數據庫中創建一個表 “ tb_user ” ,包含兩列 “ id ”,“ name ”
CREATE TABLE `tb_user` (
`id` int NOT NULL AUTO_INCREMENT ,
`name` char(255) NOT NULL ,
PRIMARY KEY (`id`)
);
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBC {
public static void main(String[] args) {
// 連接MySql數據庫必備的三個信息:數據庫url、用戶名、密碼
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String pwd = "";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");// 加載驅動
conn = DriverManager.getConnection(url, user, pwd);// 獲取連接
if (!conn.isClosed()) {
System.out.println("成功連接mysql數據庫");
stmt = conn.createStatement();// 創建sql描述的代表對象
String sql = "select * from tb_user";
rs = stmt.executeQuery(sql);// 執行sql並返回結果集
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id + " " + name);
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {// 關閉資源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtil {
public static final String DB_URL = "jdbc:mysql://localhost:3306/test";
public static final String DB_NAME = "root";
public static final String DB_PWD = "";
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 取得連接
*
* @return
*/
public static Connection getConnection() {
try {
return DriverManager.getConnection(DB_URL, DB_NAME, DB_PWD);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
/**
* 釋放資源
*
* @param rs
* @param stmt
* @param conn
*/
public static void free(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
conn = JDBCUtil.getConnection();
JDBCUtil.free(rs, stmt, conn);
結合 JDBCUtil 類,上面的 “JDBC 連接 MySql 數據庫 實例" 就可以改寫成如下形式
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBC {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = JDBCUtil.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from tb_user");
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id + " " + name);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtil.free(rs, stmt, conn);
}
}
}