您好,登錄后才能下訂單哦!
這篇文章主要介紹了PreparedStatement的setObject作用是什么的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇PreparedStatement的setObject作用是什么文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
在了解setObject作用前講解一下PreparedStatement這個(gè)接口,然后循序漸進(jìn)從setXxx()方法講解到setObject。
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就是給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)型。
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中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è)資訊頻道。
免責(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)容。