日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java PreparedStatement和statement的区别

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java PreparedStatement和statement的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、 PreparedStatement接口繼承Statement, PreparedStatement 實例包含已編譯的 SQL 語句,所以其執行速度要快于 Statement 對象。2、作為 Statement 的子類,PreparedStatement 繼承了 Statement 的所有功能。三種方法
execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要參數

3、在JDBC應用中,如果你已經是稍有水平開發者,你就應該始終以PreparedStatement代替
Statement.也就是說,在任何時候都不要使用Statement.
基于以下的原因:
一.代碼的可讀性和可維護性.
雖然用PreparedStatement來代替Statement會使代碼多出幾行,但這樣的代碼無論從可讀性還是可維護性上來說.都比直接用Statement的代碼高很多檔次:
stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");//stmt是Statement對象實例

perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
perstmt.setString(1,var1);
perstmt.setString(2,var2);
perstmt.setString(3,var3);
perstmt.setString(4,var4);
perstmt.executeUpdate(); //prestmt是 PreparedStatement 對象實例?

不用我多說,對于第一種方法.別說其他人去讀你的代碼,就是你自己過一段時間再去讀,都會覺得傷心.

二.PreparedStatement盡最大可能提高性能.
語句在被DB的編譯器編譯后的執行代碼被緩存下來,那么下次調用時只要是相同的預編譯語句就不需要編譯,只要將參數直接傳入編譯過的語句執行代碼中(相當于一個涵數)就會得到執行.這并不是說只有一個Connection中多次執行的預編譯語句被緩存,而是對于整個DB中,只要預編譯的語句語法和緩存中匹配.那么在任何時候就可以不需要再次編譯而可以直接執行.而statement的語句中,即使是相同一操作,而由于每次操作的數據不同所以使整個語句相匹配的機會極小,幾乎不太可能匹配.比如:
insert into tb_name (col1,col2) values ('11','22');
insert into tb_name (col1,col2) values ('11','23');
即使是相同操作但因為數據內容不一樣,所以整個個語句本身不能匹配,沒有緩存語句的意義.事實是沒有數據庫會對普通語句編譯后的執行代碼緩存.

當然并不是所以預編譯語句都一定會被緩存,數據庫本身會用一種策略,比如使用頻度等因素來決定什么時候不再緩存已有的預編譯結果.以保存有更多的空間存儲新的預編譯語句.

三.最重要的一點是極大地提高了安全性.

即使到目前為止,仍有一些人連基本的惡義SQL語法都不知道.
String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";
如果我們把[' or '1' = '1]作為varpasswd傳入進來.用戶名隨意,看看會成為什么?

select * from tb_name = '隨意' and passwd = '' or '1' = '1';
因為'1'='1'肯定成立,所以可以任何通過驗證.更有甚者:
把[';drop table tb_name;]作為varpasswd傳入進來,則:
select * from tb_name = '隨意' and passwd = '';drop table tb_name;有些數據庫是不會讓你成功的,但也有很多數據庫就可以使這些語句得到執行.

而如果你使用預編譯語句.你傳入的任何內容就不會和原來的語句發生任何匹配的關系.只要全使用預編譯語句,你就用不著對傳入的數據做任何過慮.而如果使用普通的statement,有可能要對drop,;等做費盡心機的判斷和過慮.

轉載于:https://www.cnblogs.com/dfyz/p/5768282.html

總結

以上是生活随笔為你收集整理的java PreparedStatement和statement的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 红桃一区二区三区 | 色多多av| 自拍偷拍第五页 | 视频在线观看免费 | 亚洲美女网站 | 久草久 | 成人免费xxxxx在线观看 | 老版水浒传83版免费播放 | 精品成人在线视频 | h在线 | 中国黄色片子 | 亚洲一区二区三区四区在线 | 免费国产一区 | 人妻熟女一区二区三区app下载 | 亚洲精品少妇久久久久久 | 黄片毛片一级 | 欧美日韩免费一区二区三区 | 一区二区三区日韩在线 | 毛片在线网站 | 午夜天堂网| 免费日韩av | 中文字幕乱码人妻二区三区 | 羞羞答答一区 | 亚洲欧洲av | 国产日韩在线视频 | 亚洲国产精品一区二区久久hs | 亚日韩 | 午夜福利视频合集1000 | 激情综合网五月 | 精品免费国产一区二区三区四区 | 国产97色在线 | 国产 | 成人片在线播放 | 在线观看欧美成人 | wwww欧美| 成人欧美一区二区三区黑人一 | 91插插插插插插插插 | 亚洲一区播放 | 少妇特黄一区二区 | 男人天堂资源 | 欧美午夜理伦三级在线观看 | 欧美黄网在线观看 | www.九色.com | 特级黄毛片 | 干干干日日日 | 免费黄色片视频 | 亚洲欧美精品一区二区 | 人人妻人人澡人人爽欧美一区双 | xxx性欧美 | 四虎国产视频 | 日韩av一区二区在线观看 | 亚洲天天综合 | 黄色在线观看国产 | 亚洲品质自拍视频 | 国产成人久久精品流白浆 | 熟妇高潮一区二区三区在线播放 | 免费午夜影院 | 国产99久久久国产精品 | 婷婷啪啪| 美足av| 可以看的黄色网 | 欧美4区| 久久精品在线观看 | 国产伦一区二区三区 | 中国在线观看免费视频 | 国产麻豆剧果冻传媒白晶晶 | 欧美色老头old∨ideo | 伊人久久大香线蕉综合75 | 国产剧情一区在线 | 住在隔壁的她动漫免费观看全集下载 | 大桥未久av在线播放 | 久久成人精品一区二区 | 亚洲字幕av| 97插插插| 老熟女毛茸茸 | 国产精品tv | 91爱爱.com | 亚洲图片欧美另类 | 成人av入口 | 人人草在线观看 | 男人的天堂av网站 | 在线免费观看不卡av | 国产情侣啪啪 | 福利在线免费视频 | 麻豆激情视频 | 91情侣视频| 日韩视频精品 | 91蝌蚪91密月| 国产人妖视频 | 色播久久 | 日日夜夜精品免费视频 | 欧美13p| 午夜剧场免费观看 | 美女久久久久久久久久 | 欧美日韩亚洲一区 | 欧美人与禽猛交乱配视频 | 99热这里只有精品5 国产精品伦子伦免费视频 精品一二三 | 国产主播福利 | 草草影院在线播放 | 日韩欧美一区在线 |