Java實現數據庫連接的最詳細教程分享
JDBC,Java Database Connectivity,即 Java 數據庫連接。實際上 JDBC 是 Java 中的一套和數據庫進行交互的API。
因為 Java 程序員需要連接多種數據庫,為了避免每一個數據庫都學習一套新的API,SUN公司提出一個JDBC接口,各個數據庫廠商根據接口寫實現類(驅動),這樣 Java 程序員只需要掌握 JDBC 接口中的一套方法,就可以訪問任何數據庫。
使用 JDBC 可以創(chuàng)建一個 Maven 工程,使用 Maven 工具便捷的下載 MySQL 驅動相關 Jar 包。使用實例如下:
1.創(chuàng)建 Maven 工程
使用 IntelliJ IDEA 新建工程,選擇 Maven 工程:

設置項目名稱:

2.添加 MySQL 驅動依賴 Jar 包
在 Maven 工程的 pom.xml 文件中加入 MySQL 驅動依賴,并下載 Jar 包:

3.創(chuàng)建一個測試使用的 MySQL 數據庫
// 創(chuàng)建名為 test_base 的數據庫
CREATE DATABASE test_base;
// 使用 test_base 數據庫
USE test_base;
// 創(chuàng)建名為 websites 的表
CREATE TABLE `websites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL DEFAULT '' COMMENT '站點名稱',
`url` varchar(255) NOT NULL DEFAULT '',
`alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
`country` char(10) NOT NULL DEFAULT '' COMMENT '國家',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
// 在 websites 中插入數據
INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'),
('2', '淘寶', 'https://www.taobao.com/', '13', 'CN'),
('3', '菜鳥教程', 'http://www.runoob.com', '5892', ''),
('4', '微博', 'http://weibo.com/', '20', 'CN'),
('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA'),
('6', 'JueJin', 'https://www.juejin.cn/', '2213', 'CN');
4.創(chuàng)建 Java 文件,編寫 JDBC 相關代碼
import java.sql.*;
/**
* @Author:WG
* @Package:PACKAGE_NAME
* @Project:JDBCTest
* @name:MySQLDemo
* @Date:2023/5/17 21:35
* @Filename:MySQLDemo
*/
public class MySQLDemo {
// MySQL 8.0 以下版本 - JDBC 驅動名及數據庫 URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/test_base?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
// MySQL 8.0 以上版本 - JDBC 驅動名及數據庫 URL
//static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
//static final String DB_URL = "jdbc:mysql://localhost:3306/test_base?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
// 數據庫的用戶名與密碼,需要根據自己的設置
static final String USER = "root";
static final String PASS = "root";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try{
// 注冊 JDBC 驅動
Class.forName(JDBC_DRIVER);
System.out.println("連接數據庫...");
// 獲取連接對象
conn = DriverManager.getConnection(DB_URL,USER,PASS);
System.out.println(" 實例化Statement對象...");
// 創(chuàng)建 Sql 執(zhí)行對象
stmt = conn.createStatement();
// Sql 查詢語句
String sql = "SELECT id, name, url FROM websites";
// 執(zhí)行 Sql
ResultSet rs = stmt.executeQuery(sql);
// 展開結果集數據庫,next()會判斷有無下條數據,有的話返回 true
while(rs.next()){
// 通過字段檢索
int id = rs.getInt("id");
String name = rs.getString("name");
String url = rs.getString("url");
// 輸出數據
System.out.print("ID: " + id);
System.out.print(", 站點名稱: " + name);
System.out.print(", 站點 URL: " + url);
System.out.print("\n");
}
// 完成后關閉
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
// 處理 JDBC 錯誤
se.printStackTrace();
}catch(Exception e){
// 處理 Class.forName 錯誤
e.printStackTrace();
}finally{
try{
// 關閉資源
if(stmt!=null) stmt.close();
}catch(SQLException se2){
// 什么都不做
}
try{
if(conn!=null) conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
// 程序運行結果如下:
// 連接數據庫...
// 實例化Statement對象...
// ID: 1, 站點名稱: Google, 站點 URL: https://www.google.cm/
// ID: 2, 站點名稱: 淘寶, 站點 URL: https://www.taobao.com/
// ID: 3, 站點名稱: 菜鳥教程, 站點 URL: http://www.runoob.com
// ID: 4, 站點名稱: 微博, 站點 URL: http://weibo.com/
// ID: 5, 站點名稱: Facebook, 站點 URL: https://www.facebook.com/
// ID: 6, 站點名稱: JueJin, 站點 URL: https://www.juejin.cn/
// Goodbye!DBCP - 數據庫連接池
數據庫連接池可以預先設置一定數量的初始連接,如果有業(yè)務需要使用連接,則從連接池中直接獲取,如果連接池中連接用光,這些連接請求將被加入到等待隊列中,等待連接歸還后再獲取連接。
數據庫連接池避免了每一次業(yè)務都需要和數據庫服務器建立一次連接,業(yè)務處理完成后再斷開連接,因為頻繁的開關連接非常的浪費資源,甚至造成服務器崩潰。
DBCP 使用實例:
1.使用數據庫連接池需要在 Maven 工程的 pom.xml 文件中加入依賴,并下載 Jar 包:
<!-- dependencies標簽主要用于管理項目中需要引入的其他依賴 -->
<dependencies>
<!--mysql驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<!--數據庫連接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>2.創(chuàng)建 Java 文件,編寫 JDBC 相關代碼:
import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.*;
/**
* @Author:WG
* @Package:PACKAGE_NAME
* @Project:JDBCTest
* @name:DBCPDemo
* @Date:2023/5/18 15:09
* @Filename:DBCPDemo
*/
public class DBCPDemo {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
// 獲取連接池
BasicDataSource dataSource = JdbcUtils.getDataSource();
try {
// 在連接池中獲取連接
conn = dataSource.getConnection();
// 創(chuàng)建 Sql 執(zhí)行對象
stmt = conn.createStatement();
// Sql 查詢語句
String sql = "SELECT id, name, url FROM websites";
// 執(zhí)行 Sql
ResultSet rs = stmt.executeQuery(sql);
// 展開結果集數據庫,next()會判斷有無下條數據,有的話返回 true
while(rs.next()){
// 通過字段檢索
int id = rs.getInt("id");
String name = rs.getString("name");
String url = rs.getString("url");
// 輸出數據
System.out.print("ID: " + id);
System.out.print(", 站點名稱: " + name);
System.out.print(", 站點 URL: " + url);
System.out.print("\n");
}
// 完成后關閉
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
// 獲取連接錯誤
se.printStackTrace();
}finally{
try{
// 關閉資源
if(stmt!=null) stmt.close();
}catch(SQLException se2){
// 什么都不做
}
try{
if(conn!=null) conn.close();
}catch(SQLException se){
se.printStackTrace();
}
}
System.out.println("Goodbye!");
}
}
class JdbcUtils {
// 創(chuàng)建連接池
private static BasicDataSource dataSource = new BasicDataSource();
static {
//必須要的配置
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test_base?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC");
dataSource.setUsername("root");
dataSource.setPassword("root");
//可選配置
dataSource.setMaxTotal(10);//連接池最大連接數
dataSource.setMaxIdle(5);//連接池最大空閑數
dataSource.setMinIdle(3);//連接池最小空閑數
dataSource.setInitialSize(10);//初始化連接池時的連接數
}
// 獲取連接池
public static BasicDataSource getDataSource() {
return dataSource;
}
}
// 程序運行結果如下:
// ID: 1, 站點名稱: Google, 站點 URL: https://www.google.cm/
// ID: 2, 站點名稱: 淘寶, 站點 URL: https://www.taobao.com/
// ID: 3, 站點名稱: 菜鳥教程, 站點 URL: http://www.runoob.com
// ID: 4, 站點名稱: 微博, 站點 URL: http://weibo.com/
// ID: 5, 站點名稱: Facebook, 站點 URL: https://www.facebook.com/
// ID: 6, 站點名稱: JueJin, 站點 URL: https://www.juejin.cn/
// Goodbye!使用數據庫連接池也同樣連接到了 MySQL 數據庫,并打印了查詢數據,這里并沒有看出使用數據庫連接池有什么優(yōu)勢,但如果使用 JDBC(非數據庫連接池方式) 與 DBCP (數據庫連接池方式)同時進行20000次數據庫連接查詢,消耗時間大概如下:
JDBC 耗時 40898毫秒
DBCP 耗時 3726毫秒
以上就是Java實現數據庫連接的最詳細教程分享的詳細內容,更多關于Java數據庫連接的資料請關注腳本之家其它相關文章!

