欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Java增刪改查數(shù)據(jù)庫(kù)的操作方法

 更新時(shí)間:2024年12月17日 16:34:24   作者:喵果森森  
這篇文章主要介紹了使用Java增刪改查數(shù)據(jù)庫(kù)的操作方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

前言

既然連接數(shù)據(jù)庫(kù)都可以通過(guò)java語(yǔ)言實(shí)現(xiàn),那么通過(guò)java語(yǔ)言對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查的操作自然是順理成章的事情了。

一、PrepareStatement類(lèi)是什么?

PrepareStatement類(lèi)是Java JDBC API中的一個(gè)類(lèi),用于執(zhí)行預(yù)編譯的SQL語(yǔ)句。這個(gè)類(lèi)實(shí)現(xiàn)java語(yǔ)言增刪改查數(shù)據(jù)庫(kù)的功能。它是Statement的子接口,提供了更高級(jí)別和更靈活的功能。(所以在編譯SQL語(yǔ)句的時(shí)候,不要使用Statement類(lèi),直接使用它的子接口吧?。?/p>

通過(guò)使用PrepareStatement類(lèi),可以先將SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)進(jìn)行編譯,然后可以重復(fù)執(zhí)行該語(yǔ)句,并且可以使用參數(shù)化查詢(xún)和批處理等高級(jí)功能。

PrepareStatement類(lèi)可以防止SQL注入攻擊,提高性能,并且可以方便地處理不同類(lèi)型的數(shù)據(jù)。

SQL注入攻擊,以statement類(lèi)為例,當(dāng)使用Statement對(duì)象執(zhí)行動(dòng)態(tài)拼接SQL語(yǔ)句時(shí),如果不對(duì)用戶(hù)輸入進(jìn)行正確的過(guò)濾和轉(zhuǎn)義,攻擊者可以通過(guò)構(gòu)造惡意的“密碼"進(jìn)行輸入來(lái)修改或執(zhí)行未經(jīng)授權(quán)的SQL語(yǔ)句。(利用轉(zhuǎn)義漏洞,繞過(guò)了賬號(hào)密碼,直接訪(fǎng)問(wèn)并可以攻擊數(shù)據(jù))

PrepareStatement的構(gòu)造方法:

connection.PrepareStatement(String sql);
//創(chuàng)建一個(gè)新的PrepareStatement對(duì)象,以指定的SQL語(yǔ)句初始化。
connection.PrepareStatement(String sql, int autoGeneratedKeys);
//創(chuàng)建一個(gè)新的PrepareStatement對(duì)象,以指定的SQL語(yǔ)句和生成的鍵標(biāo)志初始化。
connection.PrepareStatement(String sql, int[] columnIndexes);
//創(chuàng)建一個(gè)新的PrepareStatement對(duì)象,以指定的SQL語(yǔ)句和列索引標(biāo)志初始化。
connection.PrepareStatement(String sql, String[] columnNames);
//創(chuàng)建一個(gè)新的PrepareStatement對(duì)象,以指定的SQL語(yǔ)句和列名標(biāo)志初始化。
 

PrepareStatement類(lèi)是沒(méi)有直接的構(gòu)造方法的,但是可以通過(guò)Connection對(duì)象調(diào)用PrepareStatement()方法來(lái)創(chuàng)建自己的對(duì)象。第一個(gè)方法是最經(jīng)常使用的,其他的想忽略也行。

PrepareStatement類(lèi)的常用方法
方法功能描述返回值
setNull(int parameterIndex, int sqlType)將指定的參數(shù)設(shè)置為SQL NULLvoid
setBoolean(int parameterIndex, boolean x)將指定參數(shù)設(shè)置為給定的Java布爾值void
setByte(int parameterIndex, byte x)將指定參數(shù)設(shè)置為給定的Java字節(jié)值void
setShort(int parameterIndex, short x)將指定參數(shù)設(shè)置為給定的Java short值void
setInt(int parameterIndex, int x)將指定參數(shù)設(shè)置為給定的Java int值void
setLong(int parameterIndex, long x)將指定參數(shù)設(shè)置為給定的Java long值void
setFloat(int parameterIndex, float x)將指定參數(shù)設(shè)置為給定的Java float值void
setDouble(int parameterIndex, double x)將指定參數(shù)設(shè)置為給定的Java double值void
setBigDecimal(int parameterIndex, BigDecimal x)將指定參數(shù)設(shè)置為給定的Java BigDecimal值void
setString(int parameterIndex, String x)將指定參數(shù)設(shè)置為給定的Java String值void
setBytes(int parameterIndex, byte[] x)將指定參數(shù)設(shè)置為給定的Java 字節(jié)數(shù)組void
setDate(int parameterIndex, Date x)將指定參數(shù)設(shè)置為給定的SQL date值void
setTime(int parameterIndex, Time x)將指定的參數(shù)設(shè)置為給定的SQL時(shí)間戳值void
setObject(int parameterIndex, Object x)將指定參數(shù)設(shè)置為給定的Java Object對(duì)象void
executeQuery()執(zhí)行這個(gè)PreparedStatement對(duì)象中的SQL查詢(xún),并返回查詢(xún)生成的ResultSet對(duì)象ResultSet
executeUpdate()執(zhí)行這個(gè)PreparedStatement對(duì)象中的SQL語(yǔ)句(可能是INSERT、UPDATE或DELETE語(yǔ)句),并返回受影響行的計(jì)數(shù)int
execute()執(zhí)行這個(gè)PreparedStatement對(duì)象中的SQL語(yǔ)句,它可能返回多個(gè)結(jié)果boolean
clearParameters()清除PreparedStatement對(duì)象中的當(dāng)前參數(shù)值void
setArray(int parameterIndex, Array x)將指定參數(shù)設(shè)置為給定的SQL Array對(duì)象void
setBlob(int parameterIndex, Blob x)將指定參數(shù)設(shè)置為給定的SQL Blob對(duì)象void
setClob(int parameterIndex, Clob x)將指定參數(shù)設(shè)置為給定的SQL Clob對(duì)象void

使用以上PrepareStatement的方法就可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪改查的功能了。

PrepareStatement類(lèi)比Statement類(lèi)多一個(gè)預(yù)處理的功能,需要使用到通配符" ? "(也正是該功能減輕了SQL注入攻擊)

所以,PrepareStatement實(shí)例化時(shí)的String數(shù)據(jù)的SQL語(yǔ)句時(shí)不完整的,需要將通配符替換掉,才能進(jìn)行使用,這和格式化輸出語(yǔ)句的道理一樣。

在上面常用方法的表格中,最常見(jiàn)的是set()方法,盡管數(shù)據(jù)類(lèi)型不同,但第一個(gè)參數(shù):int parameterIndex 該參數(shù)都是指在String字符串中編寫(xiě)SQL語(yǔ)句的第幾個(gè)通配符,然后這個(gè)在SQL語(yǔ)句中的問(wèn)號(hào)( ? )可以被你設(shè)置的第二個(gè)數(shù)據(jù)類(lèi)型替代,SQL語(yǔ)句被補(bǔ)全了,可以進(jìn)行下一步執(zhí)行運(yùn)行的操作了。

二、實(shí)操展示

以下的所有操作都建立在連接好數(shù)據(jù)庫(kù)之后,對(duì)連接框架的代碼進(jìn)行了省略。

增刪改查的操作步驟大致都是("查"需要循環(huán)輸出語(yǔ)句反饋到控制臺(tái)):

第一步,創(chuàng)建String對(duì)象,編寫(xiě)SQL語(yǔ)句。

第二步,利用connection對(duì)象調(diào)用方法創(chuàng)建PrepareStatement對(duì)象。

第三步,使用PrepareStatement類(lèi)的set()方法,補(bǔ)全SQL語(yǔ)句中的通配符。

最后一步,調(diào)用PrepareStatement類(lèi)的executeUpdate()方法執(zhí)行該SQL語(yǔ)句。

executeUpdate()方法執(zhí)行后,Java代碼會(huì)將SQL語(yǔ)句發(fā)送給MySQL數(shù)據(jù)庫(kù),并執(zhí)行相應(yīng)的操作,如插入、更新或刪除數(shù)據(jù)。執(zhí)行完畢后,MySQL數(shù)據(jù)庫(kù)會(huì)返回操作的結(jié)果,Java代碼可以通過(guò)executeUpdate()方法獲取到受影響的行數(shù)。

1.增

實(shí)操展示:

這是數(shù)據(jù)庫(kù)表單原本的樣子:

這個(gè)table只有三行,需求:添加一個(gè)id是104,name是小浩的數(shù)據(jù)。

主要代碼:

String sql = "INSERT INTO table_name (id, name) VALUES (?, ?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, 104);
statement.setString(2, "小浩");
statement.executeUpdate();

運(yùn)行結(jié)果:

如上圖所示,刷新Workbench,實(shí)時(shí)顯示出了數(shù)據(jù)庫(kù)內(nèi)容的更新。

2.刪

實(shí)操展示:

這是數(shù)據(jù)庫(kù)表單原本的樣子:

需求:刪除一個(gè)id是103,name是小張的數(shù)據(jù)。

主要代碼:

String sql = "DELETE FROM test_table WHERE id = ? AND name = ?";
PreparedStatement statement = con.prepareStatement(sql);
statement.setInt(1, 103);
statement.setString(2, "小張");
statement.executeUpdate();

運(yùn)行結(jié)果:

如上圖所示,數(shù)據(jù)庫(kù)表單的id=103,name=小張的這一串?dāng)?shù)據(jù)已被刪除。

3.改

實(shí)操展示:

這是數(shù)據(jù)庫(kù)表單原本的樣子:

需求:將id=104 name=小王的這一串?dāng)?shù)據(jù)里,id值修改為103。

主要代碼:

String sql = "UPDATE test_table SET id= ? WHERE id = ? ";
PreparedStatement statement = con.prepareStatement(sql);
statement.setInt(1, 103);
statement.setInt(2, 104);
statement.executeUpdate();

運(yùn)行結(jié)果:

如上圖所示,數(shù)據(jù)庫(kù)中小浩的id由104更改為了103。

4.查

這是數(shù)據(jù)庫(kù)表單原本的樣子:

需求:查詢(xún)id為101的用戶(hù)的name值是什么。

主要代碼:

String sql = "SELECT name FROM test_table WHERE id = ? ";
PreparedStatement statement = con.prepareStatement(sql);
statement.setInt(1, 101);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
    // 處理查詢(xún)結(jié)果
    String value1 = resultSet.getString("name");
    System.out.println("查詢(xún)結(jié)果:id值為101的用戶(hù)名稱(chēng)是 "+value1);
}

運(yùn)行結(jié)果:

對(duì)比數(shù)據(jù)庫(kù)的信息:

如上面兩張圖顯示,通過(guò)PrepareStatement類(lèi)可以輕松實(shí)現(xiàn)java后端與數(shù)據(jù)庫(kù)之間的互通。

總結(jié)

以上就是使用java的PrepareStatement類(lèi)對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查的操作,本文初步介紹了java的使用,沒(méi)有寫(xiě)關(guān)于SQL語(yǔ)句之類(lèi)的數(shù)據(jù)庫(kù)知識(shí),有補(bǔ)充或指正的地方,歡迎在評(píng)論區(qū)中留言。

到此這篇關(guān)于使用Java增刪改查數(shù)據(jù)庫(kù)的操作方法的文章就介紹到這了,更多相關(guān)Java增刪改查數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論