最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)庫(kù)?JDBC?編程(Java?連接?MySQL)

 更新時(shí)間:2022年01月24日 16:53:33   作者:吞吞吐吐大魔王  
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)?JDBC?編程Java?連接?MySQL,在?Java?中,這樣的封裝就是由?Java?標(biāo)準(zhǔn)庫(kù)來(lái)完成的,封裝出了一套統(tǒng)一的數(shù)據(jù)庫(kù)?API?稱為?JDBC,下面來(lái)看文章的詳細(xì)介紹吧

1. 數(shù)據(jù)庫(kù)編程的基礎(chǔ)條件

如果你想實(shí)現(xiàn)代碼操作數(shù)據(jù)庫(kù),那么以下條件是你實(shí)現(xiàn)它的前提

編程語(yǔ)言:

例如 Java、C++、Python 等等,這些語(yǔ)言都能夠?qū)崿F(xiàn)操作數(shù)據(jù)庫(kù)

某個(gè)數(shù)據(jù)庫(kù)的操作:

例如我在前面章節(jié)就介紹了關(guān)于 MySQL 的操作,實(shí)現(xiàn)其它數(shù)據(jù)庫(kù)如 Oracle、SQL Server 等等也要學(xué)會(huì)對(duì)應(yīng)數(shù)據(jù)庫(kù)的一些操作

安裝數(shù)據(jù)庫(kù)驅(qū)動(dòng)包:

不同的數(shù)據(jù)庫(kù)對(duì)應(yīng)不同的編程語(yǔ)言提供了不同的數(shù)據(jù)庫(kù)驅(qū)動(dòng)包,這些驅(qū)動(dòng)包內(nèi)實(shí)現(xiàn)了操作對(duì)應(yīng)數(shù)據(jù)庫(kù)的 API

2. Java 的數(shù)據(jù)庫(kù)編程:JDBC

由于不同數(shù)據(jù)庫(kù)的廠商實(shí)現(xiàn)數(shù)據(jù)庫(kù)的 API 其實(shí)是不太一樣的,因此很多語(yǔ)言就把這些數(shù)據(jù)庫(kù)的 API 進(jìn)行再一次的封裝,封裝出了一套統(tǒng)一的 API。這樣就可以通過(guò)一套代碼來(lái)操作多個(gè)不同的數(shù)據(jù)庫(kù)了

在 Java 中,這樣的封裝就是由 Java 標(biāo)準(zhǔn)庫(kù)來(lái)完成的,封裝出了一套統(tǒng)一的數(shù)據(jù)庫(kù) API 稱為 JDBC

拓展:

Java 本身是跨平臺(tái)語(yǔ)言,雖然不同操作系統(tǒng)提供了不同的 API,但是 Java 本身也把這些 API 封裝了起來(lái),在標(biāo)準(zhǔn)庫(kù)中提供了統(tǒng)一的接口,因此 Java 就可以一次編譯,到處運(yùn)行

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 API 是 Java 標(biāo)準(zhǔn)庫(kù)自帶的,可以直接用,但是 MySQL 的 JDBC 驅(qū)動(dòng)不是系統(tǒng)自帶的,因此需要額外進(jìn)行下載安裝
  • MySQL 的 JDBC 驅(qū)動(dòng)其實(shí)就是對(duì) JDBC API 里面一些類和接口的具體實(shí)現(xiàn)

3. JDBC 訪問(wèn)數(shù)據(jù)庫(kù)的層次結(jié)構(gòu)

4. MySQL 數(shù)據(jù)庫(kù)操作介紹

在前面章節(jié)我就介紹了關(guān)于 MySQL 的一些知識(shí)了,如果你在這方面有漏洞的話,可以直接通過(guò)下面的文章來(lái)進(jìn)行補(bǔ)充。

第一章鏈接: 【MySQL 數(shù)據(jù)庫(kù)】數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí)

第二章鏈接: 【MySQL 數(shù)據(jù)庫(kù)】MySQL 的對(duì)庫(kù)的操作及其數(shù)據(jù)類型

第三章鏈接: 【MySQL 數(shù)據(jù)庫(kù)】數(shù)據(jù)表的基本操作

第四章鏈接: 【MySQL 數(shù)據(jù)庫(kù)】數(shù)據(jù)庫(kù)的約束及數(shù)據(jù)表的設(shè)計(jì)原理

第五章鏈接: 【MySQL 數(shù)據(jù)庫(kù)】聚合查詢和聯(lián)合查詢操作

第六章鏈接: 【MySQL 數(shù)據(jù)庫(kù)】MySQL 的索引和事務(wù)

5. MySQL 驅(qū)動(dòng)包的下載及添加到項(xiàng)目

由于 MySQL 的 JDBC 驅(qū)動(dòng)不是系統(tǒng)自帶的,因此需要額外進(jìn)行下載安裝

各大數(shù)據(jù)庫(kù)的官網(wǎng)就有對(duì)應(yīng)數(shù)據(jù)庫(kù)的 JDBC 驅(qū)動(dòng),但這里我推薦使用一些中央倉(cāng)庫(kù)來(lái)進(jìn)行下載,例如 mvnrepository

驅(qū)動(dòng)包下載步驟:

進(jìn)入 mvnrepository 網(wǎng)站,在搜索欄搜索 MySQL,就可以查詢到以下結(jié)果

選擇第一個(gè) MySQL Connector/J,就可以跳轉(zhuǎn)到下載版本選擇的頁(yè)面

選擇好自己對(duì)應(yīng)的數(shù)據(jù)庫(kù)版本的驅(qū)動(dòng)(大版本一定要對(duì)應(yīng),小版本區(qū)別不大可以隨意選),由于我自己是 5.x 系列的MySQL,因此,我選擇大版號(hào)是5的就行。選擇后就跳到了最終下載的頁(yè)面

點(diǎn)擊 jar 就開(kāi)始下載了(這個(gè) jar 包就是將這個(gè)驅(qū)動(dòng)包中的一些 .class 文件以壓縮包的形式進(jìn)行打包了)

下載完成后,這個(gè)驅(qū)動(dòng)包就已經(jīng)下載到你本地了,只再將它引入到你的項(xiàng)目就可以是用

6. JDBC 使用步驟

6.1 創(chuàng)建數(shù)據(jù)庫(kù)源,連接 Connection

創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)源:

DataSource dataSource=new MysqlDataSource();
// DataSource 是來(lái)自于 Java 標(biāo)準(zhǔn)庫(kù)的一個(gè)接口,它用來(lái)表示“數(shù)據(jù)庫(kù)在哪”
// MysqlDataSource 是來(lái)自于 MySQL 的驅(qū)動(dòng)包,它是實(shí)現(xiàn)了 DataSource 接口的類

數(shù)據(jù)庫(kù)就是一個(gè)服務(wù)器程序,可以通過(guò) DataSource 來(lái)描述服務(wù)器的 地址、端口、用戶名、密碼、要訪問(wèn)的數(shù)據(jù)庫(kù)名等

把數(shù)據(jù)庫(kù)的位置信息,設(shè)置到 DataSource

// 1)通過(guò)一個(gè) URL 來(lái)表示連接的數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)的 ip、端口、數(shù)據(jù)庫(kù)名、編碼方式、是否加密
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&setSSL=false");
// 2)設(shè)置登錄數(shù)據(jù)庫(kù)的用戶名
((MysqlDataSource)dataSource).setUser("root");
// 3)設(shè)置登錄數(shù)據(jù)庫(kù)的密碼
((MysqlDataSource)dataSource).setPassword("1234");

由于 setURL、setUsersetPassword 都是 MysqlDataSource 實(shí)現(xiàn)的,所以使用時(shí)需要向下轉(zhuǎn)型
上述 URL 是一種固定的寫(xiě)法,例如:jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&setSSL=false

  • jdbc 表示使用 JDBC 訪問(wèn)數(shù)據(jù)庫(kù)
  • mysql 表示訪問(wèn)的數(shù)據(jù)庫(kù)是 MySQL
  • 172.0.0.1 是 IP 地址,IP 地址是用來(lái)區(qū)分是哪個(gè)主機(jī),172.0.0.1 這個(gè) IP 地址表示當(dāng)前使用的主機(jī)自身,因?yàn)槲业?MySQL 服務(wù)器也裝在自己電腦上,自行修改
  • 3306 是端口號(hào),這是安裝數(shù)據(jù)庫(kù)服務(wù)器時(shí)手動(dòng)設(shè)置的,一般默認(rèn)是3306,它是用來(lái)區(qū)分主機(jī)上的某個(gè)程序
  • test 是要訪問(wèn)的數(shù)據(jù)庫(kù)名,這是我數(shù)據(jù)庫(kù)里面的,自行修改
  • characterEncoding=utf8 是用來(lái)指定編碼方式的,此處是使用 utf8,需要和使用的數(shù)據(jù)庫(kù)便方式對(duì)應(yīng),自行修改
  • useSSL=false 是用來(lái)表示是否加密的,此處表示不加密,自行修改

連接數(shù)據(jù)庫(kù),進(jìn)行真正的網(wǎng)絡(luò)通信:

Connection connection=dataSource.getConnection();


Connection 是 Java 標(biāo)準(zhǔn)庫(kù)里的,雖然 MySQL 驅(qū)動(dòng)里面也有。它是用來(lái)進(jìn)行和數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行網(wǎng)絡(luò)連接的
getConnection 用于獲得試圖建立到指定數(shù)據(jù)庫(kù) URL 的連接,如果連接成功就返回一個(gè) Connection 對(duì)象,如果失敗就拋出異常
由于 getConnection 可能會(huì)連接失?。ɡ?IP 地址、端口等輸入錯(cuò)誤),因此就需要在方法聲明時(shí)通過(guò) throws 給上層調(diào)用者拋出異?;蛘呤褂?code> try-catch 去處理異常

6.2 構(gòu)造 SQL 語(yǔ)句,為執(zhí)行的操作做準(zhǔn)備

通過(guò)字符串,構(gòu)造一個(gè)要執(zhí)行的 sql

// 例如要執(zhí)行新增元素操作(表名為 student,有兩列 id 和 student
Scanner scanner=new Scanner(System.in);
System.out.print("請(qǐng)輸入 id:");
int id=scanner.nextInt();
System.out.print("請(qǐng)輸入 姓名:");
String name=scanner.next();
String sql="insert into student values(?,?)";

  1. sql 就是構(gòu)造的 SQL 語(yǔ)句,里面就是要執(zhí)行的具體操作
  2. sql 語(yǔ)句中可以不用加分號(hào)
  3. 表示通配符,可以通過(guò)它對(duì) sql 語(yǔ)句里的內(nèi)容進(jìn)行動(dòng)態(tài)替換,需要替換的內(nèi)容用 ?代替,后續(xù)再使用 PreparedStatement 對(duì)象的一些方法將其再替換成具體要更改的值

例如:

void setInt(int paramenterIndex, int x) :paramenterIndex 表示 sql 語(yǔ)句中要替換通配符的具體位置(從1開(kāi)始),x 表示要替換掉具體值
void setString(int parameterIndex, String x) :paramenterIndex 表示 sql 語(yǔ)句中要替換通配符的具體位置(從1開(kāi)始),x 表示要替換掉具體值
通過(guò) prepareStatement(sql) 方法,將構(gòu)造的字符串 sql 轉(zhuǎn)化成真正的數(shù)據(jù)庫(kù)底層的 SQL 語(yǔ)句

PreparedStatement statement=connection.prepareStatement(sql);
// 通過(guò) setInt 方法,將 SQL 語(yǔ)句中的第一處通配符進(jìn)行具體值的替換
statement.setInt(1,id);
// 通過(guò) setString 方法,將 SQL 語(yǔ)句中的第二處通配符進(jìn)行具體值的替換
statement.setString(2,name);

JDBC 中,使用 Connection 和數(shù)據(jù)庫(kù)建立了連接對(duì)象 connection,那么 connection 就可以調(diào)用 prepareStatement(String sql) 方法對(duì)參數(shù) sql 指定的 SQL 語(yǔ)句進(jìn)行編譯預(yù)處理,生成該數(shù)據(jù)庫(kù)底層的內(nèi)部命令,并將該命令封裝在 PreparedStatement 對(duì)象中

6.3 執(zhí)行 SQL,并處理結(jié)果集

通過(guò) PreparedStatement 對(duì)象的 executeQuery 或者 executeUpdate 方法來(lái)執(zhí)行 SQL

如果是執(zhí)行內(nèi)容變更的操作(增加、修改、刪除),就使用 int executeUpdate() 方法

int ret=statement.executeUpdate();
// executeUpdate 的返回結(jié)果是執(zhí)行該操作后影響的行數(shù)

// 可以通過(guò)打印返回值來(lái)顯示影響的行數(shù)
System.out.println("ret: "+ret);

如果要是要執(zhí)行查詢操作,就使用 ResultSet executeQuery() 方法

ResultSet resultSet=statement.executeQuery();
// executeQuery 的返回結(jié)果是執(zhí)行該操作后查詢到的類似于臨時(shí)表的結(jié)構(gòu),存放在 ResultSet 對(duì)象中

// 接下來(lái)我們可以對(duì)它進(jìn)行遍歷,類似于迭代器的遍歷,方法如下
while(resultSet.next()){
    // 假設(shè)有兩列 id 和 name
    int id=resultSet.getInt(id);
    String name=resultSet.getString(name);
    System.out.println("id="+id+", name="+name);
}

SQL 查詢語(yǔ)句對(duì)數(shù)據(jù)庫(kù)的查詢操作將返回一個(gè) ResultSet 對(duì)象,ResultSet 對(duì)象由按列(字段)組織的數(shù)據(jù)行構(gòu)成
ResultSet 對(duì)象一次只能看到一行數(shù)據(jù),使用 next() 方法,可以移到下一個(gè)數(shù)據(jù)行(類似于 i++)
可以使用 ResultSet 對(duì)象的 getXxx() 方法,去獲得字段。常用方法后面講將介紹

6.4 釋放資源

當(dāng)我們執(zhí)行完了我們的 SQL 語(yǔ)句后,如果不再使用某些對(duì)象,就需要把連接關(guān)閉,釋放掉對(duì)應(yīng)的資源

// 如果有 ResultSet 對(duì)象不需要使用后,需要關(guān)閉這個(gè)連接
resultSet.close();

// Connection 不需要使用后,需要關(guān)閉這個(gè)連接
connection.close();

// PreparedStatement 不需要使用后,需要關(guān)閉這個(gè)連接
statement.close();

ResultSet、Connection、PreparedStatement 這些對(duì)象都對(duì)應(yīng)著一些及機(jī)器的硬件資源,如果不使用的話就要及時(shí)還回去。就類似于借書(shū),如果大家在圖書(shū)館只借書(shū),不還書(shū),那么圖書(shū)館的書(shū)籍資源就會(huì)一直減少
這些對(duì)象可以使用 close() 方法,來(lái)關(guān)閉和客戶端與服務(wù)器建立的連接,以此釋放占用的資源

6.5 JDBC 編程模板

通過(guò)上面五步,就可以進(jìn)行基礎(chǔ)的 Java 的 JDBC 編程了,雖然方法不止這一種,但如果你還不會(huì)的話,掌握這個(gè)方法就行了。最后再總結(jié)下整個(gè)的模板,依據(jù)它,我們就可以用 Java 語(yǔ)言對(duì) MySQL 數(shù)據(jù)庫(kù)進(jìn)行各種操作

public static void test(){
    // 1. 創(chuàng)建數(shù)據(jù)庫(kù)源,連接 Connection
 DataSource dataSource=new MysqlDataSource();
    ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("1234");
    Connection connection=dataSource.getConnection();

    // 2. 構(gòu)造一個(gè) SQL 語(yǔ)句,為要進(jìn)行的操作做準(zhǔn)備
    String sql="";
    PreparedStatement statement=connection.prepareStatement(sql);

 // 3. 執(zhí)行 SQL,并處理結(jié)果集
    int ret=statement.executeUpdate();

    // 4. 執(zhí)行完成,釋放資源
    statement.close();
    connection.close();
}

7. JDBC 常用接口和類

上述 JDBC 編程步驟中已經(jīng)將以下接口和類介紹了很多,所以可以互相補(bǔ)充漏洞

7.1 DataSource 和 MysqlDataSource

補(bǔ)充:

上述代碼也可以直接使用 MysqlDataSource 來(lái)創(chuàng)建一個(gè)數(shù)據(jù)源,這樣就可以不用使用向下轉(zhuǎn)型了。但是如果使用 DataSource 的話,那么代碼中其它代碼其實(shí)都是使用 DataSource 這個(gè)類型的,這是和具體數(shù)據(jù)庫(kù)類型無(wú)關(guān)的類,當(dāng)你需要切換數(shù)據(jù)庫(kù)時(shí),就不需要大幅度修改代碼

7.2 Connection

Connection 接口實(shí)現(xiàn)類由數(shù)據(jù)庫(kù)提供,獲取 Connection 對(duì)象通常有兩種方式:

方式一: 通過(guò) DataSource(數(shù)據(jù)源)對(duì)象獲取

// 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)源
DataSource dataSource=new MysqlDataSource();

// 設(shè)置數(shù)據(jù)庫(kù)具體信息
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("1234");

// 創(chuàng)建數(shù)據(jù)庫(kù)連接
Connection connection=dataSource.getConnection();

方式二: 通過(guò) DriverManager(驅(qū)動(dòng)管理類)的靜態(tài)方法獲取

// 加載 JDBC 驅(qū)動(dòng)程序
Class.forName("com.mysql.cj.jdbc.Driver");

// 創(chuàng)建數(shù)據(jù)庫(kù)連接
Connection connection=DriverManager.getConnection(url);

MySQL 數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序被封裝在 Driver 類中,該類的包名是 com.mysql.cj.jdbc,該類不是 Java 運(yùn)行環(huán)境類庫(kù)中的類

上述兩種方式的區(qū)別:

  • DriverManager 類來(lái)獲取的 Connection 連接,是無(wú)法重復(fù)利用的,每次使用完以后釋放資源時(shí),通過(guò) connection.close() 都是關(guān)閉物理連接
  • DataSource 提供連接池的支持。連接池在初始化時(shí)創(chuàng)建一定數(shù)量的數(shù)據(jù)庫(kù)連接,這些連接是可以重復(fù)利用的,每次使用完數(shù)據(jù)庫(kù)連接,通過(guò) connection.close() 釋放資源,都是將 Connection 連接對(duì)象回收

7.3 PreparedStatement

PreparedStatement 是 JDBC API 提供的三種可以將 SQL 語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)的對(duì)象之一。這里對(duì)這三種做一個(gè)簡(jiǎn)單介紹

  • Statement: 用于執(zhí)行不帶參數(shù)的簡(jiǎn)單 SQL
  • PreparedStatement
  1. 用于執(zhí)行帶或者不帶參數(shù)的 SQL 語(yǔ)句
  2. SQL 語(yǔ)句會(huì)預(yù)編譯在數(shù)據(jù)庫(kù)系統(tǒng)
  3. 執(zhí)行速度快于 Statement 對(duì)象
  • CallableStatement: 用于執(zhí)行數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的調(diào)用

7.4 ResultSet

ResultSet 對(duì)象它被稱為結(jié)果集,它代表符合 SQL 語(yǔ)句條件的所有行,并且它通過(guò)一套 getXxx() 方法提供了對(duì)這些行中數(shù)據(jù)的訪問(wèn)
ResultSet 里的數(shù)據(jù)是一行一行排列的,每當(dāng)有多個(gè)字段,并且有一個(gè)記錄指針,指針?biāo)傅臄?shù)據(jù)行叫做當(dāng)前數(shù)據(jù)行,我們只能來(lái)操作當(dāng)前的數(shù)據(jù)行。我們?nèi)绻胍〉媚骋粭l記錄,就要使用 ResultSet next() 方法,可以通過(guò)結(jié)合 while 循環(huán)來(lái)遍歷 ResultSet 里的所有記錄

常見(jiàn) ResultSet 對(duì)象方法:

注意:

ResultSet 對(duì)象和數(shù)據(jù)庫(kù)連接對(duì)象 Connection 實(shí)現(xiàn)了緊密連接,一旦連接對(duì)象被關(guān)閉,ResultSet 對(duì)象中的數(shù)據(jù)就會(huì)立刻消失

8. Java 操作數(shù)據(jù)庫(kù)實(shí)例

8.1 往表中新增數(shù)據(jù)

在 student 表中新增學(xué)生 id 和 name:

public static void testInsert() throws SQLException {
    DataSource dataSource=new MysqlDataSource();
    ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("1234");
    Connection connection=dataSource.getConnection();
    Scanner scanner=new Scanner(System.in);
    System.out.print("請(qǐng)輸入id:");
    int id=scanner.nextInt();
    System.out.print("請(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();
    System.out.println("ret: "+ret);
    statement.close();
    connection.close();
}

8.2 刪除表中的數(shù)據(jù)

在表名為 student 的表中,刪除學(xué)生表中符合 id 條件的記錄:

public static void testDelete() throws SQLException {
    DataSource dataSource=new MysqlDataSource();
    ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("1234");
    Connection connection=dataSource.getConnection();
    Scanner scanner=new Scanner(System.in);
    System.out.print("請(qǐng)輸入要?jiǎng)h除的 id:");
    int id=scanner.nextInt();
    String sql="delete from student where id=?";
    PreparedStatement statement=connection.prepareStatement(sql);
    statement.setInt(1,id);
    int ret=statement.executeUpdate();
    System.out.println("ret: "+ret);
    statement.close();
    connection.close();
}

8.3 修改表中的數(shù)據(jù)

在表名為 student 的表中,將符合 id 條件的學(xué)生姓名進(jìn)行修改:

public static void testUpdate() throws SQLException {
    DataSource dataSource=new MysqlDataSource();
    ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("1234");
    Connection connection=dataSource.getConnection();
    Scanner scanner=new Scanner(System.in);
    System.out.print("情輸入你要更改的學(xué)生 id:");
    int id=scanner.nextInt();
    System.out.print("請(qǐng)輸入你要更改后的學(xué)生姓名:");
    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();
    System.out.println("ret: "+ret);
    statement.close();
    connection.close();
}

8.4 查找表中的數(shù)據(jù)

查找表名為 student 的表中的所有數(shù)據(jù):

public static void testSelect() throws SQLException {
    DataSource dataSource=new MysqlDataSource();
    ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("1234");
    Connection connection=dataSource.getConnection();
    String sql="select * from student";
    PreparedStatement statement=connection.prepareStatement(sql);
    ResultSet resultSet=statement.executeQuery();
    while(resultSet.next()){
        int id=resultSet.getInt("id");
        String name=resultSet.getString("name");
        System.out.println("id = "+id+", name = "+name);
    }
    resultSet.close();
    statement.close();
    connection.close();
}

到此這篇關(guān)于MySQL數(shù)據(jù)庫(kù) JDBC 編程(Java 連接 MySQL)的文章就介紹到這了,更多相關(guān)Java 連接 MySQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

凤翔县| 锦屏县| 定南县| 霍城县| 宁南县| 崇仁县| 晋江市| 莱州市| 长汀县| 微博| 城固县| 安丘市| 元朗区| 田林县| 肇庆市| 南昌市| 绵竹市| 诸暨市| 黄浦区| 竹山县| 桦川县| 沙湾县| 甘南县| 章丘市| 察隅县| 宝清县| 连云港市| 花垣县| 平陆县| 黑龙江省| 湖南省| 新平| 舒城县| 马鞍山市| 昌都县| 永善县| 江安县| 四会市| 双牌县| 东乡族自治县| 祁阳县|