溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PreparedStatement的setObject作用是什么

發(fā)布時(shí)間:2023-05-10 14:29:57 來(lái)源:億速云 閱讀:224 作者:zzz 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹了PreparedStatement的setObject作用是什么的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇PreparedStatement的setObject作用是什么文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

    PreparedStatement的setObject作用

    在了解setObject作用前講解一下PreparedStatement這個(gè)接口,然后循序漸進(jìn)從setXxx()方法講解到setObject。

    PreparedStatement

    java.sql包中的PreparedStatement接口繼承了Statement接口,PreparedStatement對(duì)象可以防止sql注入,而Statement不能防止sql注入,所以實(shí)際開(kāi)發(fā)的時(shí)候千萬(wàn)不要使用Statement。

    SQL注入:

    比如我的SQL語(yǔ)句為:

    select * from user where username =' zhangsan' username ' and password ='password ' ;

    其中傳入的參數(shù)為:username(用戶名) 和 password(密碼)。

    惡意注入之前的含意是查詢user表的所有字段,匹配條件是username和password跟數(shù)據(jù)表的某條數(shù)據(jù)完全匹配使得條件成立,換言之就是用戶名和密碼必須都為正確的才可以查詢到數(shù)據(jù)。

    惡意注入方式一:輸入 username: 隨意 password: ’ or ‘1’='1

    select * from user where username ='xxxxx' and password ='xxx' or '1'='1';

    and 優(yōu)先級(jí) 執(zhí)行 高于 or

    惡意注入方式二、在SQL添加 – 是mysql的注釋 用戶名框:輸入 zhangsan’ 空格–空格 password 隨意輸入即可

    select * from user where username ='zhangsan' -- ' and password ='' ;

    注意:以上的 zhangsan’ 空格–空格 中的zhangsan是數(shù)據(jù)庫(kù)存在的

    setObject

    setObject就是給JDBC的SQL語(yǔ)句的占位符賦值的,即是下面的“?”

    預(yù)編譯的SQL:參數(shù)使用?作為占位符

    注意:sql的參數(shù)使用?作為占位符。 如:

    select * from user where username = ? and password = ?;

    獲取執(zhí)行sql語(yǔ)句的對(duì)象 PreparedStatement Connection.prepareStatement(String sql)

    給?賦值:(Xxx代表參數(shù)類(lèi)型)

    • 方法: setXxx(參數(shù)1,參數(shù)2)

    • 參數(shù)1:?的位置編號(hào) 從1 開(kāi)始

    • 參數(shù)2:?的值

    例如:

    setString(1,"one")就是定義參數(shù)類(lèi)型為String類(lèi)型,然后給第一個(gè)?位置上賦值為one。

    select * from user where username = 'one' and password = ?;

    setInt(2,2)就是定義參數(shù)類(lèi)型為Int類(lèi)型,然后給第二個(gè)?的位置上賦值為2。

    select * from user where username = 'one' and password = 2;

    注意:setString定義為String類(lèi)型就只能傳String類(lèi)型,也就是說(shuō)定義什么類(lèi)型就要傳入什么類(lèi)型。

    重點(diǎn)來(lái)了

    PreparedStatement的setObject的作用和setString的作用是一樣的!

    setObject的第一個(gè)參數(shù)是?的位置編號(hào),第二個(gè)參數(shù)是Object類(lèi)型,因?yàn)樗械念?lèi)型默認(rèn)繼承object,這個(gè)時(shí)候參數(shù)就沒(méi)有類(lèi)型限制,你可以傳入String類(lèi)型或者Int類(lèi)型…不需要手動(dòng)設(shè)置傳參類(lèi)型。

    例如:

    setObject(1,"one")就是給第一個(gè)?位置上賦值為String類(lèi)型的"one"。

    select * from user where username = 'one' and password = ?;

    setObject(2,2)就是給第二個(gè)?的位置上賦值為Int類(lèi)型的2。

    select * from user where username = 'one' and password = 2;

    JDBC關(guān)于PreparedStatement.setObject的一些細(xì)節(jié)

    JDBC中PreparedStatement.setObject(index,Object)方法,

    1、index從1開(kāi)始

    2、在插入時(shí)間格式的字段時(shí),此處的Object格式必須是java.sql.Date的對(duì)象

    3、Oracle表中date格式可以表示年月日時(shí)分秒

    4、從表中取出對(duì)象封裝到JavaBean對(duì)象中,字段類(lèi)型可以直接為java.util.Date 

    關(guān)于“PreparedStatement的setObject作用是什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“PreparedStatement的setObject作用是什么”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

    向AI問(wèn)一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI