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

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

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

前言

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

一、PrepareStatement類是什么?

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

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

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

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

PrepareStatement的構造方法:

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

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

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

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

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

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

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

二、實操展示

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

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

第一步,創(chuàng)建String對象,編寫SQL語句。

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

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

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

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

1.增

實操展示:

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

這個table只有三行,需求:添加一個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();

運行結果:

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

2.刪

實操展示:

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

需求:刪除一個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();

運行結果:

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

3.改

實操展示:

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

需求:將id=104 name=小王的這一串數(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();

運行結果:

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

4.查

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

需求:查詢id為101的用戶的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()) {
    // 處理查詢結果
    String value1 = resultSet.getString("name");
    System.out.println("查詢結果:id值為101的用戶名稱是 "+value1);
}

運行結果:

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

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

總結

以上就是使用java的PrepareStatement類對數(shù)據(jù)庫進行增刪改查的操作,本文初步介紹了java的使用,沒有寫關于SQL語句之類的數(shù)據(jù)庫知識,有補充或指正的地方,歡迎在評論區(qū)中留言。

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

相關文章

最新評論