IDEA使用JDBC導(dǎo)入配置jar包連接MySQL數(shù)據(jù)庫(kù)
jdbc編程簡(jiǎn)介
JDBC,Java Database Connectivity ,java數(shù)據(jù)庫(kù)連接.是一種執(zhí)行SQL語(yǔ)句的API,是java中數(shù)據(jù)庫(kù)連接規(guī)范,這個(gè)API由java.sql.*,javax.sql.*包中的一些類(lèi)和接口組成,它為Java開(kāi)發(fā)人員操作數(shù)據(jù)庫(kù)提供了一個(gè)標(biāo)準(zhǔn)的API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn)
1.導(dǎo)入jar包
jar包下載地址:
1.輸入地址->輸入mysql搜素
2.點(diǎn)擊第一個(gè)后選擇版本
3.選擇版本和本機(jī)mysql大版本相同的 jar包
4.點(diǎn)擊下載jar包
5.創(chuàng)建lib包,導(dǎo)入jar包,直接cv
6.右擊lib->點(diǎn)擊Add as Library
此時(shí)就解析出了jar包中的內(nèi)容,我們就可以進(jìn)行對(duì)數(shù)據(jù)庫(kù)據(jù)的編程了
2.建立數(shù)據(jù)庫(kù)連接
和數(shù)據(jù)庫(kù)建立連接時(shí),需要用到數(shù)據(jù)庫(kù),首先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)和一張表然后進(jìn)行數(shù)據(jù)庫(kù)連接
mysql> desc student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.01 sec)
jdbc編程時(shí)用到的資源,必須要導(dǎo)入jar包才能用
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import javax.sql.DataSource; import java.sql.*;
2.1創(chuàng)建數(shù)據(jù)源描述數(shù)據(jù)庫(kù)服務(wù)器在哪
使用 DataSource 描述 MySQL 服務(wù)器的位置.
DataSource dataSource = new MysqlDataSource(); ((MysqlDataSource)dataSource).setUrl ("jdbc:mysql://127.0.0.1:3306/java_2?characterEncoding=utf8&useSSL=false"); ((MysqlDataSource)dataSource).setUser("root"); ((MysqlDataSource)dataSource).setPassword("123456");
url是唯一地址定位符,就是網(wǎng)址
127.0.0.1:數(shù)據(jù)庫(kù)服務(wù)器所在的IP地址,這是個(gè)特殊的IP,表示主機(jī)自己,環(huán)回網(wǎng)址,相當(dāng)于this. 只要數(shù)據(jù)庫(kù)服務(wù)器和jdbc程序在一臺(tái)電腦上都可以使用這個(gè)IP :3306是端口號(hào),安裝時(shí)默認(rèn)的,使用IP確定了主機(jī),網(wǎng)絡(luò)數(shù)據(jù)報(bào)給那個(gè)程序是通過(guò)端口號(hào)來(lái)識(shí)別出數(shù)據(jù)庫(kù)服務(wù)器的 java_2數(shù)據(jù)庫(kù)名 characterEncoding=utf8字符編碼方式 useSSL=false關(guān)閉加密功能
2.2實(shí)現(xiàn)一個(gè)mysql客戶端通過(guò)網(wǎng)絡(luò)和服務(wù)器進(jìn)行通信
Connection connection = dataSource.getConnection();
要注意使用Java.sql的Connection
3.使用代碼操作數(shù)據(jù)庫(kù)
控制客戶端給數(shù)據(jù)庫(kù)發(fā)送請(qǐng)求,執(zhí)行操作
3.1增刪改操作
增刪改和查詢稍有不同~
增加操作
構(gòu)造 SQL 語(yǔ)句. JDBC 操作數(shù)據(jù)庫(kù), 本質(zhì)仍然是通過(guò) SQL 來(lái)描述數(shù)據(jù)庫(kù)操作
String sql = "insert into student values(001,'張三')"; PreparedStatement statement = connection.prepareStatement(sql); int ret = statement.executeUpdate(); statement.close(); connection.close();
String sql 描述的是sql是什么樣的
還需要一個(gè)特殊的類(lèi):
執(zhí)行是靠PreparedStatement,它會(huì)對(duì)sql進(jìn)行一些預(yù)處理,解析之類(lèi)的,之前通過(guò)cmd輸入的語(yǔ)句是發(fā)送給服務(wù)器端讓服務(wù)器進(jìn)行解析
當(dāng)前數(shù)據(jù)是寫(xiě)死的,我們更希望是動(dòng)態(tài)的
我們通過(guò)控制臺(tái)輸入一些信息,來(lái)操作數(shù)據(jù)庫(kù)
Scanner scanner = new Scanner(System.in); System.out.println("請(qǐng)輸入學(xué)號(hào)"); int id = scanner.nextInt(); System.out.println("請(qǐng)輸入姓名"); String name = scanner.next(); String sql = "insert into student values(" + id + ",'" + name+ "')"; PreparedStatement statement = connection.prepareStatement(sql); int ret = statement.executeUpdate();
但是這種操作還存在一個(gè)問(wèn)題
這樣的代碼可讀性很低,另一方面,這個(gè)代碼還容易引起SQL注入攻擊
如果輸入這樣的代碼就會(huì)在插入的同時(shí)引起很多其他的問(wèn)題
因此我們提出更靠譜的方案:通過(guò)占位符替換的方法輸入操作信息
Scanner scanner = new Scanner(System.in); System.out.println("請(qǐng)輸入學(xué)號(hào)"); int id = scanner.nextInt(); System.out.println("請(qǐng)輸入姓名"); String name = scanner.next(); String sql = "insert into student values(?,?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setInt(1,id); statement.setString(2,name); int ret = statement.executeUpdate();
注意:這里的占位符下標(biāo)是從1開(kāi)始的!!
執(zhí)行增加,刪除,更新三個(gè)操作用executeUpdate執(zhí)行,代碼和增加的代碼是相同的
執(zhí)行查詢操作使用executeQuery
更新操作
也是通過(guò)占位符來(lái)操作
Scanner scanner = new Scanner(System.in); System.out.println("請(qǐng)輸入學(xué)號(hào)"); int id = scanner.nextInt(); System.out.println("請(qǐng)輸入修改的姓名"); String name = scanner.next(); String sql = "update student set name = ? where id = ? "; PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1,name); statement.setInt(2,id); int ret = statement.executeUpdate(); statement.close(); connection.close();
數(shù)據(jù)庫(kù)中的結(jié)果:
mysql> select*from student; +------+------+ | id | name | +------+------+ | 1 | 張三 | | 2 | 李四 | | 3 | 王五 | | 5 | 趙六 | +------+------+ 4 rows in set (0.00 sec) 更新后: mysql> select*from student; +------+--------+ | id | name | +------+--------+ | 1 | 張三 | | 2 | 李四 | | 3 | wangqi | | 5 | 趙六 | +------+--------+ 4 rows in set (0.00 sec)
刪除操作
Scanner scanner = new Scanner(System.in); System.out.println("請(qǐng)輸入要?jiǎng)h除的學(xué)號(hào)"); int id = scanner.nextInt(); String sql = "delete from student where id = ? "; PreparedStatement statement = connection.prepareStatement(sql); statement.setInt(1,id); int ret = statement.executeUpdate(); statement.close(); connection.close();
結(jié)果:
mysql> select*from student; +------+------+ | id | name | +------+------+ | 1 | 張三 | | 2 | 李四 | | 5 | 趙六 | +------+------+ 3 rows in set (0.00 sec)
三個(gè)操作的代碼是相同的
執(zhí)行時(shí)給服務(wù)器發(fā)送網(wǎng)絡(luò)請(qǐng)求
int ret = statement.executeUpdate();
ret返回的是一個(gè)整數(shù),表示執(zhí)行的結(jié)果影響到了多少行
3.2查詢操作
查詢操作用到的是
ResultSet ret = statement.executeQuery();
與上面三個(gè)操作不同的是:
executeUpdate 只能返回一個(gè) int.
executeQuery 返回的是一個(gè) ResultSet 對(duì)象. 可以把這個(gè)對(duì)象視為是一個(gè) "臨時(shí)表"
增刪改返回的是影響的行數(shù),只返回一個(gè)整數(shù)
查詢的結(jié)果集合是一張表,因此比其它幾個(gè)操作多一個(gè)遍歷,遍歷后才能看到結(jié)果
String sql = "select*from student"; PreparedStatement statement = connection.prepareStatement(sql); ResultSet ret = statement.executeQuery(); //遍歷臨時(shí)表, 拿到里面的數(shù)據(jù). // resultSet 簡(jiǎn)單的當(dāng)成一個(gè)類(lèi)似于 "迭代器" // next 如果沒(méi)有到達(dá)末尾, 就是返回 true, 要繼續(xù)循環(huán). // next 如果到達(dá)末尾, 就返回 false, 結(jié)束循環(huán). while(ret.next()) { int id = ret.getInt("id"); String name = ret.getString("name"); System.out.println("id: "+id+" name: "+name); } ret.close(); statement.close(); connection.close();
獲取哪一列,就用getXXX方法 ,XXX為列的類(lèi)型
結(jié)果:
4.斷開(kāi)連接釋放資源
java有GC即垃圾回收機(jī)制,會(huì)自動(dòng)處理申請(qǐng)的內(nèi)存,但是像這種連接的資源還需要我們手動(dòng)釋放
資源的釋放順序是和創(chuàng)建順序相反的
釋放的順序:先用到的資源后釋放
ret.close(); statement.close(); connection.close();
到此這篇關(guān)于IDEA使用JDBC導(dǎo)入配置jar包連接MySQL數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)JDBC連接MySQL數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 在idea中如何操作MySQL數(shù)據(jù)庫(kù)
- idea連接mysql數(shù)據(jù)庫(kù)失敗的幾種解決方案
- idea自帶database連接mysql失敗問(wèn)題的解決辦法
- idea中使用mysql的保姆級(jí)教程(超詳細(xì))
- IDEA連接MySQL數(shù)據(jù)庫(kù)并執(zhí)行SQL語(yǔ)句使用數(shù)據(jù)圖文詳解
- IDEA創(chuàng)建SpringBoot項(xiàng)目整合mybatis時(shí)mysql-connector-java報(bào)錯(cuò)異常的詳細(xì)分析
- IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫(kù)
- 使用Idea連接MySQL的詳細(xì)步驟總結(jié)
- 教你使用idea連接服務(wù)器mysql的步驟
相關(guān)文章
Spring Boot利用JSR303實(shí)現(xiàn)參數(shù)驗(yàn)證的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Spring Boot利用JSR303實(shí)現(xiàn)參數(shù)驗(yàn)證的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05解決IDEA中不能正常輸入光標(biāo)變粗的問(wèn)題
這篇文章主要介紹了在IDEA中不能正常輸入光標(biāo)變粗的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-09-09SpringBoot個(gè)性化啟動(dòng)Banner設(shè)置方法解析
這篇文章主要介紹了SpringBoot個(gè)性化啟動(dòng)Banner設(shè)置方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03SpringBoot統(tǒng)一功能處理示例詳解(攔截器)
這篇文章主要介紹了SpringBoot統(tǒng)一功能處理(攔截器),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08Mybatis-plus原生pages分頁(yè)未生效的解決方案
本文主要介紹了Mybatis-plus原生pages分頁(yè)未生效的解決方案,包含介紹了未生效的5種原因以及解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07

Thymeleaf對(duì)象的使用之基本對(duì)象實(shí)例解析

MyBatis中一對(duì)多的xml配置方式(嵌套查詢/嵌套結(jié)果)