<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] ## 問題01:什么是JDBC? > 一套訪問數據庫的標準Java類庫 > 一套用于執行SQL語句的Java API > 位于``` java.sql.* ```中 ![](https://img.kancloud.cn/fa/ed/faed4d564e092e744001091998035c4e_511x474.png) JDBC是Java訪問數據庫的標準規范(即定義接口),具體的實現由各大數據庫廠商來實現或提供(即數據庫驅動)。 * 建立連接 * 發送命令 * 處理數據 * 得到結果 ## 問題02:JDBC開發步驟。 ![](https://img.kancloud.cn/09/c4/09c4ba8217925ee9d7d0942a017522ec_664x748.png) ## 問題03:如何進行驅動注冊? ``` public static Class<?> forName(String className) throws ClassNotFoundException ``` Returns the Class object associated with the class or interface with the given string name. Parameters: className - the fully qualified name of the desired class. Returns: the Class object for the class with the specified name. Throws: **ClassNotFoundException - if the class cannot be located** > 如果拋出ClassNotFoundException異常,那么可以檢查一下數據庫驅動(*.jar包)是否加載到項目的classpath中。如果已經加載了jar包,那么檢查一下驅動路徑是否完全正確(包名和類名大小寫等)。 ## 問題04:Class.forName()和DriverManager.regist()有什么區別? > 在 com.mysql.jdbc.Driver中已經有一段靜態代碼塊用于向 DriverManager注冊一個Driver實例 > 采用DriverManager.registerDriver(Driver driver)方法,會造成Driver實例被注冊兩次 > 在開發過程中,建議采用Class.forName("包名.類名")的方式進行注冊 ### 不同版本的driver > MySQL 5.5及之前版本: com.mysql.jdbc.Driver > MySQL 5.6及之后版本:com.mysql.cj.jdbc.Driver ## 問題05:如何獲得數據庫連接?(URL格式) ``` public static Connection getConnection(String url, String user, String password) throws SQLException ``` 根據給定的數據庫URL、用戶名及密碼與數據庫建立連接,并返回一個Connection,其中user為數據庫用戶名, password為數據庫的密碼。 ### 不同版本的url ![](https://img.kancloud.cn/da/82/da8274ed289ec818f4982396d9dd1534_1011x173.png) MySQL 5.6及之后版本的MySQL數據庫的時區設定比中國時間早8個小時,需要在URL地址后面指定時區。 > mysql8.x的jdbc升級了,增加了時區(serverTimezone)屬性,并且不允許為空。 ``` jdbc:mysql://hostname:port/databasename?serverTimezone=GMT%2B8 ``` ``` jdbc:mysql://[IP]:[PORT]/[DB]?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true ``` ## 問題06:Statement和PreparedStatement的創建和區別? ### 方法 | 方法 | 描述 | | --- | --- | | Statement createStatement() | 創建一個 Statement 對象來將 SQL 語句發送到數據庫 | | PreparedStatement prepareStatement(String sql) | 創建一個 PreparedStatement 對象來將預編譯的SQL語句發送到數據庫 | | CallableStatement prepareCall(String sql) | 創建一個 CallableStatement 對象來調用數據庫的存儲過程 | | void setAutoCommit(boolean autoCommit) | 用于設置Connection對象的提交模式 | | void commit() | 用于提交事務 | | void rollback() | 用于回滾事務 | ### 區別 > PreparedStatement 接口繼承于Statement接口 > 不僅擁有Statement接口中的所有方法,還針對帶有參數的SQL語句的執行進行了擴展 > 創建和使用的時候注意參數 ## 問題07:什么是SQL注入式攻擊?如何避免? > 所謂SQL注入式攻擊,就是通過輸入特定數據和字符來構造(或者影響)SQL命令,進而欺騙服務器執行惡意的SQL命令。 ### 示例:用戶登錄判斷 假設當前用戶輸入的用戶名保存在變量usr中,密碼保存在變量pwd中, 使用SQL語句``` select * from user where name=' "+usr+" ' and password = ' "+pwd+" ' ```來進行判斷。 當用戶輸入的用戶名和密碼為``` 1'or'1'='1 ```,SQL語句在拼接輸入變量之后會變為: ``` select * from user where name='1'or'1'='1' and password = '1'or'1'='1' ``` 其中'1'='1' 為true,SQL語句的where條件將會失效,即只要數據表user存在數據,該SQL語句都能查詢到結果,從而實現注入式攻擊。 > 在實際的開發過程中,如果涉及到向SQL語句傳遞參數時,最好使用PreparedStatement接口進行實現。因為該接口不僅可以提高SQL的執行效率,還可以避免SQL語句的注入式攻擊。 ## 問題08:PreparedStatement的優點有哪些? 1. 效率高 2. 易讀性高 3. 可維護性高 4. 安全性高 ## 問題09:如何執行SQL語句?描述一下返回值? | 方法 | 描述 | | --- | --- | | boolean execute() | 執行的SQL語句有查詢結果,則返回true,否則返回false | | ResultSet executeQuery() | 執行查詢類型(select)的SQL語句 | | int executeUpdate() | 執行修改類型(insert、update、delete)的SQL語句 | ## 問題10:如何對ResultSet進行遍歷? ![](https://img.kancloud.cn/6e/41/6e410deaa2f13d814138bc2cd1cd0043_740x396.png) ``` getXXX(String columnLabel) ``` columnLabel表示的是字段名稱。 ``` getXXX(int columnIndex) ``` columnIndex表示列的索引,索引值從1開始。 ## 問題11:如何釋放資源?釋放資源的順序。 ![](https://img.kancloud.cn/09/c7/09c7d3aaacc332885aaeac6a2aff454f_219x143.png) 順序: ``` ResultSet → Statement(或PreparedStatement、CallableStatement)→ Connection ``` # 實踐:數據庫連接 ## 1. 實驗目的 1. 能夠在Java Web項目中連接MySQL數據庫; 2. 能夠實現數據庫的連接與查詢; 3. 能夠根據實際開發抽象出數據庫工具類優化開發; 4. 能夠按照MVC模式對數據庫進行查詢和顯示。 ## 2. 實驗要求 1. 設計功能菜單“文件列表”、“文件檢索”功能; 2. 使用FileMsg.java對文件表的信息進行封裝; 3. 編寫JDBCUtil工具類來加載驅動、封裝無參獲得連接方法以及重載資源釋放方法; 4. 編寫db.properties來保存數據庫信息; 5. 編寫ShowServlet作為控制層,實現對數據庫的查詢并將數據保存在域對象中; 6. 編寫SearchServlet作為控制層,實現對數據庫的模糊查詢并將數據保存在域對象中; 7. 在show.jsp視圖層顯示域對象中的用戶數據。 ## 3. 實驗內容 ### 1. 設計菜單欄 ![](https://img.kancloud.cn/f6/a5/f6a555c199d49294def888b2179cd7ea_713x104.png) ### 2. 編寫映射類 ![](https://img.kancloud.cn/fb/08/fb081799513b0393d24c7490e14d36b2_293x199.png) ### 3. 編寫數據庫配置文件 ![](https://img.kancloud.cn/33/dc/33dc842d3ccdde8feabed5851f7e09ed_377x138.png) ### 4. 編寫數據庫工具類 ![](https://img.kancloud.cn/9d/08/9d08b38b515ea088ef01756576888936_715x272.png) ### 5. 編寫顯示頁面show.jsp 1. 如果沒有文件則顯示空白提示 ![](https://img.kancloud.cn/ad/22/ad22a75852e64afbfe683461d7c18a34_1257x228.png) 2. 如果有內容則顯示文件信息 ![](https://img.kancloud.cn/de/bf/debfbfc07d16b9f012b38257d42dc429_1215x480.png) ### 6. 編寫查詢所有控制器ShowServlet ![](https://img.kancloud.cn/b6/04/b6042311b8cf33536c02f7fa35b05194_1237x842.png) ### 7. 編寫模糊查詢控制器SearchServlet ![](https://img.kancloud.cn/b6/0e/b60e823898caba310814168b88229fdc_1263x303.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看