Java的JDBC編程使用之連接Mysql數(shù)據(jù)庫(kù)
一、Java的數(shù)據(jù)庫(kù)編程:JDBC
JDBC,即Java Database Connectivity,java數(shù)據(jù)庫(kù)連接。是一種用于執(zhí)行SQL語(yǔ)句的Java API,它是 Java中的數(shù)據(jù)庫(kù)連接規(guī)范。這個(gè)API由 java.sql.*,javax.sql.* 包中的一些類和接口組成,它為Java 開(kāi)發(fā)人員操作數(shù)據(jù)庫(kù)提供了一個(gè)標(biāo)準(zhǔn)的API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn)。
二、JDBC工作原理
JDBC 為多種關(guān)系數(shù)據(jù)庫(kù)提供了統(tǒng)一訪問(wèn)方式,作為特定廠商數(shù)據(jù)庫(kù)訪問(wèn)API的一種高級(jí)抽象,它主要包 含一些通用的接口類。
JDBC訪問(wèn)數(shù)據(jù)庫(kù)層次結(jié)構(gòu):
JDBC優(yōu)勢(shì):
- Java語(yǔ)言訪問(wèn)數(shù)據(jù)庫(kù)操作完全面向抽象接口編程
- 開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用不用限定在特定數(shù)據(jù)庫(kù)廠商的API
- 程序的可移植性大大增強(qiáng)
三、JDBC使用
- 準(zhǔn)備數(shù)據(jù)庫(kù)驅(qū)動(dòng)包,并添加到項(xiàng)目的依賴中:
在項(xiàng)目中創(chuàng)建文件夾lib,并將依賴包mysql-connector-java-5.1.47.jar復(fù)制到lib中。再配置該jar 包到本項(xiàng)目的依賴中:右鍵點(diǎn)擊項(xiàng)目Open Module Settings,在Modules中,點(diǎn)擊項(xiàng)目,配置 Dependencies,點(diǎn)擊+,JARS or Directories,將該lib文件夾配置進(jìn)依賴中,表示該文件夾下的 jar包都引入作為依賴。
- 建立數(shù)據(jù)庫(kù)連接
MySQL數(shù)據(jù)連接的URL參數(shù)格式如下:
jdbc:mysql://服務(wù)器地址:端口/數(shù)據(jù)庫(kù)名?參數(shù)名=參數(shù)值
// 加載JDBC驅(qū)動(dòng)程序:反射,這樣調(diào)用初始化com.mysql.jdbc.Driver類,即將該類加載到JVM方法 區(qū),并執(zhí)行該類的靜態(tài)方法塊、靜態(tài)屬性。 Class.forName("com.mysql.jdbc.Driver"); // 創(chuàng)建數(shù)據(jù)庫(kù)連接 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test? user=root&password=root&useUnicode=true&characterEncoding=UTF-8");
- 創(chuàng)建操作命令(Statement)
//3.構(gòu)造一個(gè)Sql String sql =" insert into stu(id,name,age) values(1,zhang,3)"; //需要把 Sql語(yǔ)句轉(zhuǎn)化為對(duì)象 PreparedStatement statement = connection.prepareStatement(sql);
- 使用操作命令來(lái)執(zhí)行SQL
// 查詢操作 preparedStatement.executeQuery(); // 新增、修改、刪除操作 preparedStatement.executeUpdate();
- 處理結(jié)果集ResultSet.
//接受結(jié)果集合 ResultSet resultSet = statement.executeQuery(); //結(jié)果集遍歷 while (resultSet.next()){ //移動(dòng)光標(biāo) int id = resultSet.getInt("id"); String name = resultSet.getString("name"); int age = resultSet.getInt("age"); System.out.println(id+" "+name+" "+age+" "); }
- 釋放資源
try { if(resultSet != null){ resultSet.close(); } if(preparedStatement != null){ preparedStatement.close(); } if(connection != null){ connection.close(); } } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("數(shù)據(jù)庫(kù)錯(cuò)誤"); }
四、JDBC使用步驟總結(jié)
1. 創(chuàng)建數(shù)據(jù)庫(kù)連接Connection
2. 創(chuàng)建操作命令Statement
3. 使用操作命令來(lái)執(zhí)行SQL
4. 處理結(jié)果集ResultSet
5. 釋放資源
五、JDBC常用接口和類
5.1 JDBC API
在Java JDBC編程中對(duì)數(shù)據(jù)庫(kù)的操作均使用JDK自帶的API統(tǒng)一處理,通常與特定數(shù)據(jù)庫(kù)的驅(qū)動(dòng)類是完全 解耦的。所以掌握J(rèn)ava JDBC API (位于 java.sql 包下) 即可掌握J(rèn)ava數(shù)據(jù)庫(kù)編程。
5.2 數(shù)據(jù)庫(kù)連接Connection
Connection接口實(shí)現(xiàn)類由數(shù)據(jù)庫(kù)提供,獲取Connection對(duì)象通常有兩種方式:
- 一種是通過(guò)DriverManager(驅(qū)動(dòng)管理類)的靜態(tài)方法獲?。?/li>
// 加載JDBC驅(qū)動(dòng)程序 Class.forName("com.mysql.jdbc.Driver"); // 創(chuàng)建數(shù)據(jù)庫(kù)連接 Connection connection = DriverManager.getConnection(url);
- 一種是通過(guò)DataSource(數(shù)據(jù)源)對(duì)象獲取。實(shí)際應(yīng)用中會(huì)使用DataSource對(duì)象
DataSource dataSource = new MysqlDataSource(); ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://localhost:3306/db1?serverTimezone=UTC"); ((MysqlDataSource)dataSource).setUser("root"); ((MysqlDataSource)dataSource).setPassword("123456");
以上兩種方式的區(qū)別是:
1. DriverManager類來(lái)獲取的Connection連接,是無(wú)法重復(fù)利用的,每次使用完以后釋放資源 時(shí),通過(guò)connection.close()都是關(guān)閉物理連接。
2. DataSource提供連接池的支持。連接池在初始化時(shí)將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫(kù)連接,這些連接 是可以復(fù)用的,每次使用完數(shù)據(jù)庫(kù)連接,釋放資源調(diào)用connection.close()都是將 Conncetion連接對(duì)象回收。
5.3 Statement對(duì)象
Statement對(duì)象主要是將SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)中。JDBC API中主要提供了三種Statement對(duì)象
主要掌握兩種執(zhí)行SQL的方法:
- executeQuery() 方法執(zhí)行后返回單個(gè)結(jié)果集的,通常用于select語(yǔ)句
- executeUpdate()方法返回值是一個(gè)整數(shù),指示受影響的行數(shù),通常用于update、insert、delete 語(yǔ)句
5.4 ResultSet對(duì)象
ResultSet對(duì)象它被稱為結(jié)果集,它代表符合SQL語(yǔ)句條件的所有行,并且它通過(guò)一套getXXX方法提供 了對(duì)這些行中數(shù)據(jù)的訪問(wèn)。
ResultSet里的數(shù)據(jù)一行一行排列,每行有多個(gè)字段,并且有一個(gè)記錄指針,指針?biāo)傅臄?shù)據(jù)行叫做當(dāng) 前數(shù)據(jù)行,我們只能來(lái)操作當(dāng)前的數(shù)據(jù)行。我們?nèi)绻胍〉媚骋粭l記錄,就要使用ResultSet的next() 方法 ,如果我們想要得到ResultSet里的所有記錄,就應(yīng)該使用while循環(huán)。
六、示例代碼
import com.mysql.cj.jdbc.MysqlDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class TestJDBC { public static void main(String[] args) throws SQLException { // MysqlDataSource dataSource = new MysqlDataSource(); //dataSource.setUrl(); //1. 創(chuàng)建數(shù)據(jù)源,即獲取數(shù)據(jù)庫(kù)的位置 DataSource dataSource = new MysqlDataSource(); ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://localhost:3306/db1?serverTimezone=UTC"); ((MysqlDataSource)dataSource).setUser("root"); ((MysqlDataSource)dataSource).setPassword("123456"); // 2 .和數(shù)據(jù)庫(kù)服務(wù)器建立連接 Connection connection = dataSource.getConnection(); //3.構(gòu)造一個(gè)Sql String sql =" insert into stu(id,name,age) values(?,?,?)"; // String sql =" insert into stu(id,name,age) values(1,zhang,3)"; //需要把 Sql語(yǔ)句轉(zhuǎn)化為對(duì)象 PreparedStatement statement = connection.prepareStatement(sql); statement.setInt(1,66); statement.setString(2,"a"); statement.setInt(3,7); //4.構(gòu)造好的sql 發(fā)送給服務(wù)器; int n = statement.executeUpdate(); System.out.println("n:"+ n); //5.最后一步 釋放資源 statement.close(); connection.close(); } }
總結(jié)
到此這篇關(guān)于Java的JDBC編程使用之連接Mysql數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān) JDBC連接Mysql數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- JDBC-idea導(dǎo)入mysql連接java的jar包(mac)的方法
- 詳解java連接mysql數(shù)據(jù)庫(kù)的五種方式
- java最新版本連接mysql失敗的解決過(guò)程
- 詳解Java使用JDBC連接MySQL數(shù)據(jù)庫(kù)
- Java使用jdbc連接實(shí)現(xiàn)對(duì)MySQL增刪改查操作的全過(guò)程
- 手把手教你如何用JAVA連接MYSQL(mysql-connector-j-8.0.32.jar)
- Java+MySQL前后端連接新手小白教程
- Java連接MySQL數(shù)據(jù)庫(kù)并實(shí)現(xiàn)數(shù)據(jù)交互的示例
相關(guān)文章
Java使用easyExcel實(shí)現(xiàn)Excel文件解析
這篇文章主要為大家詳細(xì)介紹了Java如何使用easyExcel實(shí)現(xiàn)Excel文件解析,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02springboot如何獲取applicationContext?servletContext
這篇文章主要介紹了springboot如何獲取applicationContext?servletContext問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01spring關(guān)于組件的注入及獲取流程場(chǎng)景分析
這篇文章主要介紹了spring關(guān)于組件的注入及獲取流程場(chǎng)景分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-07-07SpringBoot @Autowired注入為空的情況解讀
這篇文章主要介紹了SpringBoot @Autowired注入為空的情況解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖
這篇文章給大家介紹了SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-03-03在MyBatis中使用 # 和 $ 書(shū)寫(xiě)占位符的區(qū)別說(shuō)明
這篇文章主要介紹了在MyBatis中使用 # 和 $ 書(shū)寫(xiě)占位符的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10Spring?Cloud?Loadbalancer服務(wù)均衡負(fù)載器詳解
這篇文章主要介紹了Spring?Cloud?Loadbalancer服務(wù)均衡負(fù)載器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03Java編程中二維數(shù)組的初始化和基本操作實(shí)例
這篇文章主要介紹了Java編程中二維數(shù)組的初始化和基本操作實(shí)例,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10Spring與Dubbo搭建一個(gè)簡(jiǎn)單的分布式詳情
這篇文章主要介紹了Spring與Dubbo搭建一個(gè)簡(jiǎn)單的分布式詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08