<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java JDBC `PreparedStatement`示例 > 原文: [https://howtodoinjava.com/java/jdbc/how-to-execute-preparedstatement-using-jdbc/](https://howtodoinjava.com/java/jdbc/how-to-execute-preparedstatement-using-jdbc/) 在數據庫管理系統中, [**預備語句**](https://en.wikipedia.org/wiki/Prepared_statement)或**參數化語句**是用于高效重復執行相同或相似數據庫語句的功能。 預備語句通常與 SQL 語句(例如查詢或更新)一起使用,采用模板的形式,在每次執行期間將某些常量值替換為模板。 一個典型的模板如下所示:“`NSERT INTO EMPLOYEE (ID, NAME) VALUES (?, ?);`” 此處,值在運行時在以“`?`”表示的占位符處設置。 ## 預備語句如何工作? 大多數關系數據庫通過四個步驟來處理 JDBC / SQL 查詢: 1. 解析傳入的 SQL 查詢 2. 編譯 SQL 查詢 3. 規劃/優化數據采集路徑 4. 執行優化的查詢/獲取并返回數據 對于發送到數據庫的每個 SQL 查詢,一個`Statement`將始終執行上述四個步驟。 **在**上面的執行過程中,`PreparedStatement`預先執行步驟(1)–(3)。 因此,在創建`PreparedStatement`時,會立即執行一些預優化。 這樣做的目的是減輕執行時數據庫引擎的負擔。 ## 使用預備語句與簡單的 JDBC 語句相比的優勢 * SQL 語句的預編譯和數據庫側緩存可提高整體執行速度,并能夠批量重用同一 SQL 語句。 * 通過內置對引號和其他特殊字符的轉義,自動防止 SQL 注入攻擊。 請注意,這要求您使用任何`PreparedStatement.setXxx()`方法來設置值,并且不能通過字符串連接使用 SQL 字符串中的值。 * 除了以上兩種主要用法外,預備語句還使處理諸如 BLOB 和 CLOB 之類的復雜對象變得容易。 如果您錯過了,在以前的文章中,我們了解了 [JDBC 驅動的類型](//howtodoinjava.com/java/jdbc/jdbc-basics-types-of-jdbc-drivers/ "JDBC Basics : Types of JDBC Drivers?")和一些基本操作,例如[使用 JDBC](//howtodoinjava.com/java/jdbc/jdbc-mysql-database-connection-example/ "JDBC MySQL Database Connection Example") 建立數據庫連接,然后是[如何執行`SELECT`查詢](//howtodoinjava.com/misc/jdbc-select-query-example/ "JDBC SELECT Query Example"),然后單擊[`INSERT`查詢示例](//howtodoinjava.com/java/jdbc/jdbc-sql-insert-query-example/ "JDBC SQL INSERT Query Example")。 ![JDBC-Icon](https://img.kancloud.cn/1c/97/1c97cbc2085a82c3870087e272080b29_335x146.png) **執行預備語句**需要執行以下步驟: 1)建立數據庫連接 2)設置值并執行預備語句 前提條件包括至少設置數據庫架構和創建表。 ```java CREATE SCHEMA 'JDBCDemo' ; CREATE TABLE 'JDBCDemo'.'EMPLOYEE' ( 'ID' INT NOT NULL DEFAULT 0 , 'FIRST_NAME' VARCHAR(100) NOT NULL , 'LAST_NAME' VARCHAR(100) NULL , 'STAT_CD' TINYINT NOT NULL DEFAULT 0 ); ``` 讓我們在代碼中編寫以上步驟: ## 1)建立 JDBC 數據庫連接 盡管我們在建立 [JDBC 連接](//howtodoinjava.com/java/jdbc/jdbc-mysql-database-connection-example/)時已經了解了它,但是讓我們用這個簡單的代碼片段來回顧一下。 ```java Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager .getConnection("jdbc:mysql://localhost:3306/JDBCDemo", "root", "password"); ``` ## 2)設置值并執行`PreparedStatement` 這是帖子中的主要步驟和核心部分。 它需要創建一個`Statement`對象,然后使用其`executeQuery()`方法。 ```java PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, 87); pstmt.setString(2, "Lokesh"); pstmt.setString(3, "Gupta"); pstmt.setInt(4, 5); int affectedRows = pstmt.executeUpdate(); ``` 讓我們看看整個代碼在工作。 ## 完整的 JDBC `PreparedStatement`示例 ```java package com.howtodoinjava.jdbc.demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class PreparedStatementDemo { public static void main(String[] args) { Connection connection = null; PreparedStatement pstmt = null; String sql = "INSERT INTO EMPLOYEE (ID,FIRST_NAME,LAST_NAME,STAT_CD) VALUES (?,?,?,?)"; try { Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/JDBCDemo", "root", "password"); pstmt = connection.prepareStatement(sql); pstmt.setInt(1, 87); pstmt.setString(2, "Lokesh"); pstmt.setString(3, "Gupta"); pstmt.setInt(4, 5); int affectedRows = pstmt.executeUpdate(); System.out.println(affectedRows + " row(s) affected !!"); } catch (Exception e) { e.printStackTrace(); }finally { try { pstmt.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } } } } Output: 1 row(s) affected !! ``` 以上就是這篇文章。 如果需要解釋,請給我評論。 **快樂學習!**
                  <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>

                              哎呀哎呀视频在线观看