freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)與開發(fā)畢業(yè)論文-資料下載頁

2025-06-20 00:19本頁面
  

【正文】 。(user)。50. }51. }52. 53. /**54. *刪除用戶55. *@paramuser56. */57. publicvoiddelete(Useruser){58. if(()=0){59. (用戶id無效,無法刪除!!)。60. }else{61. (user)。62. }63. }64. 65. }這里我們還需要額外的兩個(gè)類:一個(gè)是異常類,因?yàn)槲覀冃枰远x我們自己的一個(gè)異常,這樣方便進(jìn)行捕獲:1. package2. 3. publicclassDaoExceptionextendsRuntimeException{4. 5. privatestaticfinallongserialVersionUID=1L。6. 7. publicDaoException(){8. 9. }10. 11. publicDaoException(Exceptione){12. super(e)。13. }14. 15. publicDaoException(Stringmsg){16. super(msg)。17. }18. 19. publicDaoException(Stringmsg,Exceptione){20. super(msg,e)。21. }22. 23. }同時(shí),我們這里面采用工廠模式進(jìn)行實(shí)例化UserDao對(duì)象:1. package2. 3. import4. import5. 6. publicclassDaoFactory{7. /**8. *單例模式9. */10. privatestaticUserDaouserDao=null。11. privatestaticDaoFactoryinstance=newDaoFactory()。12. 13. privateDaoFactory(){14. /**15. *通過讀取屬性文件來動(dòng)態(tài)的加載Dao層類16. */17. Propertiesprop=newProperties()。18. try{19. FileInputStreamfis=newFileInputStream(src//weijia/domain/)。20. (fis)。21. StringclassName=(userDaoClass)。22. Class?clazz=(className)。23. userDao=(UserDao)()。24. ()。25. }catch(Throwablee){26. thrownewExceptionInInitializerError(e)。27. }28. }29. 30. publicstaticDaoFactorygetInstance(){31. returninstance。32. }33. 34. publicUserDaocreateUserDao(){35. returnuserDao。36. }37. 38. }這里面是讀取properties文件,然后去讀取類名進(jìn)行加載,這種方式是很靈活的1. package2. 3. import4. 5. publicclassTestDemo{6. 7. publicstaticvoidmain(String[]args)throwsException{8. UserServiceuserService=newUserService()。9. (添加用戶:)。10. (newUser(1,jiangwei,newDate(()),300))。11. }12. 13. }這里我們看到其實(shí)這些操作真的很簡單,就是按照那樣的幾個(gè)步驟來操作即可,同時(shí)我們還需要將結(jié)構(gòu)進(jìn)行分層,以便管理,我們這里面測試的時(shí)候,撇開了創(chuàng)建數(shù)據(jù)庫的一個(gè)環(huán)節(jié),至于那個(gè)環(huán)節(jié),也是不難的,可以從網(wǎng)上搜索一下即可。Statement中的sql依賴注入的問題接著來看一下關(guān)于我們上面的例子中使用了Statement進(jìn)行操作的,其實(shí)這里面是存在一個(gè)問題的,就是會(huì)有sql注入的問題,我們先來看一下這個(gè)問題:查詢學(xué)生信息:1. /**2. *使用Statement讀取數(shù)據(jù)3. *@paramname4. *@throwsSQLException5. */6. staticvoidread(Stringname)throwsSQLException{7. Connectionconn=null。8. Statementst=null。9. ResultSetrs=null。10. try{11. conn=()。12. //創(chuàng)建語句13. st=()。14. //執(zhí)行語句(不建議使用*)15. Stringsql=selectid,namefromuserwherename=39。+name+39。16. rs=(sql)。17. //根據(jù)列名取數(shù)據(jù)18. while(()){19. ((id)+\t+(name)+\t)。20. }21. }catch(SQLExceptione){22. ()。23. }catch(Exceptione){24. ()。25. }finally{26. (rs,st,conn)。27. }28. }我們使用代碼測試一下:1. read(39。or1or39。)。我們運(yùn)行會(huì)發(fā)現(xiàn),將查詢出所有的學(xué)生的記錄,這個(gè)是什么原因呢?我們不妨將sql打印一下會(huì)發(fā)現(xiàn):1. selectid,namefromuserwherename=39。39。or1or39。39。擦,因?yàn)閟ql語句中把1認(rèn)為是true,又因?yàn)槭腔虻年P(guān)系,所以將所有的學(xué)生的信息查詢出來了,這個(gè)就是sql注入,因?yàn)镾tatement會(huì)把傳遞進(jìn)來的參數(shù)進(jìn)行一下轉(zhuǎn)化操作,用引號(hào)包含一下,所以會(huì)出現(xiàn)這個(gè)問題,那么我們該怎么解決呢?有的同學(xué)說我們可以添加一句過濾的代碼,將傳遞的參數(shù)取出單引號(hào),這個(gè)方法是可行的的,但是這個(gè)只能解決那些使用單引號(hào)的數(shù)據(jù)庫,可能有的數(shù)據(jù)庫使用的是雙引號(hào)包含內(nèi)容,那就不行了,所以應(yīng)該想一個(gè)全套的方法,那么這里我們就是用一個(gè)叫做:PreparedStatement類,這個(gè)類是Statement類的子類:我們這里只看這個(gè)sql注入的問題:我們將上面讀取用戶信息的代碼改寫成PreparedStatement:1. /**2. *使用PreparedStatement3. *@paramname4. *@throwsSQLException5. */6. staticvoidreadPrepared(Stringname)throwsSQLException{7. Connectionconn=null。8. PreparedStatementst=null。9. ResultSetrs=null。10. try{11. conn=()。12. //執(zhí)行語句(不建議使用*)13. Stringsql=selectid,namefromuserwherename=?。14. //創(chuàng)建語句15. st=(sql)。16. (1,name)。17. rs=()。18. //根據(jù)列名取數(shù)據(jù)19. while(()){20. ((id)+\t+(name)+\t)。21. }22. }catch(Exceptione){23. 24. }25. }之后我們在執(zhí)行:1. readPrepared(39。or1or39。)。就不會(huì)全部查出來了,只會(huì)查詢空結(jié)果,因?yàn)楸碇袥]有一個(gè)學(xué)生的名字叫做 39。or 1 or39。JDBC中特殊數(shù)據(jù)類型的操作問題第一個(gè)是日期問題:我們在操作日期問題的時(shí)候會(huì)發(fā)現(xiàn),使用PreparedStateme
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1