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