柚子快報(bào)激活碼778899分享:MySQL JDBC 編程
柚子快報(bào)激活碼778899分享:MySQL JDBC 編程
難道是針對(duì)?個(gè)數(shù)據(jù)庫(kù)寫(xiě)?套調(diào)?的?法嗎?因?yàn)轵?qū)動(dòng)和 API 完全不同,所以不同的數(shù)據(jù)操作也是不同 的,要針對(duì)每種數(shù)據(jù)庫(kù)寫(xiě)?套調(diào)?代碼就太麻煩了,那要怎么辦?
解決以上問(wèn)題的辦法就是使用 JDBC。
2.1 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.* 包中的?些類(lèi)和接?組成,它為?Java 開(kāi)發(fā)人員操作數(shù)據(jù)庫(kù)提供了?個(gè)標(biāo)準(zhǔn)的 API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)?訪問(wèn)。
簡(jiǎn)單來(lái)說(shuō),使用了 JDBC 之后,不管是什么數(shù)據(jù)庫(kù)與什么數(shù)據(jù)庫(kù)驅(qū)動(dòng),我們只需要使用?套標(biāo)準(zhǔn)代碼就可以實(shí)現(xiàn)對(duì)不同數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)?操作(添加、修改、刪除、查詢(xún)),也就解決了我們上面說(shuō)的那些問(wèn)題了。
2.2?JDBC 工作原理
JDBC 為多種關(guān)系數(shù)據(jù)庫(kù)提供了統(tǒng)?訪問(wèn)?式,作為特定?商數(shù)據(jù)庫(kù)訪問(wèn) API 的?種?級(jí)抽象,?它主要包含?些通?的接?類(lèi)。
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)。
3.JDBC 使用
=========
JDBC 操作步驟如下:
3.1 創(chuàng)建項(xiàng)目并添加 MySQL 驅(qū)動(dòng)
創(chuàng)建?個(gè) Java 項(xiàng)?,并添加 MySQL 驅(qū)動(dòng)(mysql-connector-java-5.1.47.jar),需要注意不同數(shù)據(jù)庫(kù)版本要對(duì)應(yīng)相應(yīng)的驅(qū)動(dòng)包。
操作步驟:點(diǎn)擊項(xiàng)?屬性 -> Modules -> Dependencies -> 點(diǎn)擊“+”號(hào) -> 1.Jars or directories -> 選擇驅(qū)動(dòng)包 -> 點(diǎn)擊 OK 確認(rèn)。
3.2 使用代碼操作數(shù)據(jù)庫(kù)
操作數(shù)據(jù)庫(kù) MySQL 提供了兩種操作 API:
DriverManager DataSource(推薦使用)
接下來(lái)咱們使? DataSource 來(lái)實(shí)現(xiàn)操作數(shù)據(jù)庫(kù)。
使用代碼操作數(shù)據(jù)庫(kù)分為以下 5 個(gè)步驟:
獲取數(shù)據(jù)源(準(zhǔn)備?作,點(diǎn)擊 MySQL 連接?具,并輸??戶(hù)名、密碼) 獲取連接(敲擊回車(chē)試圖建?客戶(hù)端和服務(wù)器端的連接) 獲取執(zhí)行器(連接到服務(wù)器并切換到數(shù)據(jù)庫(kù)) 查詢(xún)或操作數(shù)據(jù)庫(kù)(輸?命令,并得到結(jié)果) 關(guān)閉連接(關(guān)閉客戶(hù)端)
3.2.1 獲得數(shù)據(jù)源
數(shù)據(jù)源是 MysqlDataSource,獲取?式如下,需要輸?數(shù)據(jù)庫(kù)連接的 MySQL 服務(wù)器地址、?戶(hù)名和密碼:
// 1.獲取數(shù)據(jù)源 DataSource (設(shè)置MySQL的服務(wù)器地址)
MysqlDataSource dataSource = new MysqlDataSource();
// 1.1 設(shè)置連接的 MySQL 服務(wù)器
dataSource.setURL("jdbc:mysql://127.0.0.1:3306/study?characterEncoding=utf8&useSSL=true");
// 1.2 設(shè)置?戶(hù)名
dataSource.setUser("root");
// 1.3 設(shè)置密碼
dataSource.setPassword("12345678");
注意:如果操作過(guò)程中出現(xiàn)了錯(cuò)誤,可嘗試將useSSL改為false,因?yàn)橛行╇娔X不支持SSL加密。
3.2.2 獲得連接
// 2.得到連接 Connection
Connection connection = dataSource.getConnection();
連接對(duì)象是 Connection,注意此步驟操作容易出錯(cuò),?定是 java.sql?包下的 Connection 對(duì)象:
3.2.3 獲得執(zhí)行器
執(zhí)行器是用來(lái)執(zhí)行?SQL 命令的,執(zhí)行器有三種:
Statement PreparedStatement CallableStatement
實(shí)際開(kāi)發(fā)中最常?的是 PreparedStatement 對(duì)象,PreparedStatement 優(yōu)點(diǎn)如下:
具體實(shí)現(xiàn)如下:
// 3.得到執(zhí)行器 (組裝MySQL)
String insertSql = "insert into city(id, name) values(?, ?)";
PreparedStatement statement = connection.prepareStatement(insertSql);
// 填充占位符
statement.setInt(1, 5);
statement.setString(2, "廣東");
PreparedStatement 有主要兩種重要的方法:
executeQuery():方法執(zhí)行后返回單個(gè)結(jié)果集的,通常用于 select 語(yǔ)句。 executeUpdate():方法返回值是?個(gè)整數(shù),指示受影響的行數(shù),通常用于 update、insert、?delete 語(yǔ)句。
3.3.4 查詢(xún)或操作數(shù)據(jù)庫(kù)
添加數(shù)據(jù)庫(kù)使用?PreparedStatement.executeUpdate() 方法,返回?個(gè) 整數(shù),具體實(shí)現(xiàn)代碼如下:
// 4.執(zhí)行 SQL
int result = statement.executeUpdate();
System.out.println("受影響的行數(shù):" + result);
3.3.5 關(guān)閉數(shù)據(jù)庫(kù)連接
關(guān)閉數(shù)據(jù)庫(kù)連接是為了不浪費(fèi) MySQL 服務(wù)器端的資源,最終實(shí)現(xiàn)代碼:
package city_jdbc;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class AddCity {
public static void main(String[] args) throws SQLException {
// 1.獲取數(shù)據(jù)源 DataSource (設(shè)置MySQL的服務(wù)器地址)
MysqlDataSource dataSource = new MysqlDataSource();
// 1.1 設(shè)置連接的 MySQL 服務(wù)器
dataSource.setURL("jdbc:mysql://127.0.0.1:3306/study?characterEncoding=utf8&useSSL=true");
// 1.2 設(shè)置?戶(hù)名
dataSource.setUser("root");
// 1.3 設(shè)置密碼
dataSource.setPassword("12345678");
// 2.得到連接 Connection
Connection connection = dataSource.getConnection();
// 3.得到執(zhí)行器 (組裝MySQL)
String insertSql = "insert into city(id, name) values(?, ?)";
PreparedStatement statement = connection.prepareStatement(insertSql);
// 填充占位符
statement.setInt(1, 5);
statement.setString(2, "廣東");
// 4.執(zhí)行 SQL
int result = statement.executeUpdate();
System.out.println("受影響的行數(shù):" + result);
// 5.關(guān)閉資源(從小到大)
statement.close();
connection.close();
}
}
運(yùn)行結(jié)果:
4. 查詢(xún)功能實(shí)現(xiàn)
查詢(xún)數(shù)據(jù)庫(kù)使用?PreparedStatement.executeQuery?方法,返回?個(gè) ResultSet 對(duì)象,具體實(shí)現(xiàn)代碼如下:
package city_jdbc;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class SelCity {
public static void main(String[] args) throws SQLException {
// 1.獲取數(shù)據(jù)源,得到DataSource
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setURL("jdbc:mysql://127.0.0.1:3306/study?characterEncoding=utf8&useSSL=true");
dataSource.setUser("root");
dataSource.setPassword("12345678");
// 2.得到連接
Connection connection = dataSource.getConnection();
// 3.得到執(zhí)行器,并組裝MySQL
String selectSql = "select * from city where id";
PreparedStatement statement = connection.prepareStatement(selectSql);
statement.setInt(1, 10);
// 4.執(zhí)行SQL,打印查詢(xún)結(jié)果
ResultSet resultSet = statement.executeQuery(); // 得到結(jié)果集
while (resultSet.next()) { // 如果結(jié)果集的下一行有數(shù)據(jù)
City city = new City();
// resultSet.getInt("id") ——> 查詢(xún)當(dāng)前行中列名為“id”的值
city.setId(resultSet.getInt("id"));
city.setName(resultSet.getString("name"));
System.out.println(city);
}
// 5.關(guān)閉資源
resultSet.close();
statement.close();
connection.close();
}
}
ResultSet 對(duì)象它被稱(chēng)為結(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)绻胍〉媚?條記錄,就要使用?ResultSet 的 next() 方法 ,如果我們想要得到 ResultSet 里的所有記錄,就應(yīng)該使用?while 循環(huán)。
City 類(lèi):
柚子快報(bào)激活碼778899分享:MySQL JDBC 編程
相關(guān)文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。