JDBC中PreparedStatement介面的使用
在《java使用JDBC連線MySql資料庫》中說明了JDBC連結資料庫的基本方式,其中執行SQL語句使用的是Statement介面,這裡介紹一個更好用的介面,PreparedStantment介面。
PreparedStatement是什麼?
public interface PreparedStatement extends Statement
使用方法:
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
String sql = "insert into person(name,age,description)values(?,?,?)" ;
PreparedStatement ps = conn.prepareStatement(sql);
//設定佔位符對應的值,問號是為佔位符,有幾個問號就代表要插入幾個列,這樣看來sql程式碼就比較簡潔。
ps.setString(1, p.getName());
ps.setInt(2, p.getAge());
ps.setString(3, p.getDescription());
ps.executeUpdate();
ps.close();
conn.close();
相對於Statement,PreparedStatement的特點是:引數化查詢;
優點是什麼?
1.提高程式碼的可讀性
SELECT name FROM table1 WHERE age=?
ps.setString(1, "小明");
?:佔位符
2.提高效能
使用 PreparedStatement 最重要的一點好處是它擁有更佳的效能優勢,SQL語句會預編譯在資料庫系統中。執行計劃同樣會被快取起來,它允許資料庫做引數化查詢。使用預處理語句比普通的查詢更快,因為它做的工作更少(資料庫對SQL語句的分析,編譯,優化已經在第一次查詢前完成了)。為了減少資料庫的負載,生產環境中的JDBC程式碼你應該總是使用PreparedStatement 。值得注意的一點是:為了獲得性能上的優勢,應該使用引數化sql查詢而不是字串追加的方式
3.防止SQL注入式攻擊
什麼是SQL注入?連結
在使用引數化查詢的情況下,資料庫系統(eg:MySQL)不會將引數的內容視為SQL指令的一部分來處理,而是在資料庫完成SQL指令的編譯後,才套用引數執行,因此就算引數中含有破壞性的指令,也不會被資料庫所執行
參考資料
1.MySQL資料庫學習筆記(九)—-JDBC的ResultSet介面(查詢操作)、PreparedStatement介面重構增刪改查(含SQL注入的解釋): 連結
2.SQL注入攻擊 : 連結
3.JDBC為什麼要使用PreparedStatement而不是Statement:連結
相關推薦
JDBC中PreparedStatement介面的使用
在《java使用JDBC連線MySql資料庫》中說明了JDBC連結資料庫的基本方式,其中執行SQL語句使用的是Statement介面,這裡介紹一個更好用的介面,PreparedStantment介面。 PreparedStatement是什麼? pu
JDBC中PreparedStatement介面的執行邏輯
PreparedStatement介面是Statement介面的子介面,其好處是建立PreparedStatement物件時直接使用Sql語句做引數,能自動解析和編譯Sql語句,省去了Sql語句拼接和編譯的麻煩,提高了安全性。一、舉個例子來說明PreparedStatemen
JDBC中Statement介面和PreparedStatement介面的差異性
Statement:用於執行SQL語句的工具介面。該物件及可以執行DDL/DCL語句,也可以用於執行DML語句,還可以用於執行SQL查詢,返回查詢到的結果集。常用方法如下: ResultSet executeQuery(String sql)throws SQLExceptio
JDBC中PreparedStatement接口提供的execute、executeQuery和executeUpdate之間的區別及用法
ica cat nvi 一個 execute ear let ace 刪除 JDBC中PreparedStatement接口提供的execute、executeQuery和executeUpdate之間的區別及用法 (2012-08-27 09:36:18) 轉載▼
JDBC中PreparedStatement的
import org.junit.Test; import com.mysql.jdbc.Connection; import com.mysql.jdbc.PreparedStatement; import com.mysql.jdbc.ResultSet; public class Te
JDBC 中preparedStatement和Statement
一、概念 PreparedStatement是用來執行SQL查詢語句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三種方式來執行查詢語句,其中 Statement 用於通用查詢, PreparedStatement 用於執
JDBC中PreparedStatement用法程式碼示例
為了防止使用者使用sql語句注入攻擊資料庫,可以使用Statement介面的子介面 java.sql.PreparedStatement extends Statement 該介面表示預編譯的 SQL 語句的物件,SQL 語句被預編譯並存儲在 PreparedStateme
jdbc中PreparedStatement不定引數的小技巧
今天產品部需要幫忙弄個小專案,就只需建立一個數據表,頁面提供一些簡單的增刪改查,excel 匯出功能,由於時間緊,就不採取什麼SSH之類的重量級框架,直接用JSP+servlet+JDBC快速完成這個小專案。在查詢使用PreparedStatement時,發現如
jdbc中PreparedStatement物件的幾個常用方法
很久沒有用過JDBC了,有些方法就想當然的使用了,也沒有細究,結果就是出錯出錯出錯!所以還是得看API! 不多說,羅列出PreparedStatement物件在初級開發中幾個常用的方法: 1).
jdbc使用 PreparedStatement 介面實現更新資料操作
jdbc使用 PreparedStatement 介面實現更新資料操作 package chap04.sec03; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql
JDBC 中preparedStatement和Statement區別
一、概念 PreparedStatement是用來執行SQL查詢語句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三種方式來執行查詢語句,其中 Statement 用於通用查詢,
JDBC中Statement介面提供的execute、executeQuery和executeUpdate之間的區別
方法executeQuery 用於產生單個結果集的語句,例如 SELECT 語句。 被使用最多的執行 SQL 語句的方法是 executeQuery。這個方法被用來執行 SELECT 語句,它幾乎是使用最多的 SQL 語句。 方法executeUp
JDBC中Statement與PreparedStatement的區別
sql語句 使用 更改 spa ext form表單 時間 where 額外 1. statement每次執行sql語句,相關數據庫都要執行sql語句的編譯;preparedstatement是預編譯的, 采用Cache機制(預編譯語句,放在Cache中,下次執行相同SQL
JDBC中Statement、PreparedStatement、CallableStatement的區別
1、Statement 作用:執行不含引數的靜態SQL語句。 用法:使用JDBC的Connection例項呼叫createStatement()方法建立一個Statement例項。通過Statement例項的execute()、executeQuerry()或execut
JAVA通過JDBC操作MySQL資料庫(三):PreparedStatement介面操作資料庫
JAVA通過JDBC操作MySQL資料庫(三):PreparedStatement介面操作資料庫 Statement介面的問題 PreparedStatement介面操作資料庫 Statement介面的問題 在文章JAVA通過JDBC操作
初學JDBC(四)-使用Preparedstatement介面實現增刪改操作
上一篇部落格中我講了使用Statement對資料庫中的表內容進行增刪改操作,先講了原始的增刪改即每次增加刪除修改都需要載入資料庫驅動,連線資料庫,執行SQL語句,關閉資料庫,這樣的話,程式碼的重複量有些大,程式碼冗餘比較明顯,後來進行修改,運用了Java繼承封裝
使用JDBC中的PreparedStatement批量插入
工具類import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.sql.Connection; import java.sql.DriverManager; imp
錯誤筆記:JDBC中Statement和PreparedStatement對於Date型別寫入資料庫問題
今天寫JDBC使用Statement執行sql語句向oracle資料庫中插入Date型別資料時,遇到了一些問題: 首先Date類在java.util下和java.sql下都有,他們在控制檯上的答應分別是: java.util.date: java.sql.date:
JDBC中的——PreparedStatement 預編譯原理
一、prepareStatement語句有三大好處: 1、提高了程式碼的可讀性和可維護性 雖然用PreparedStatement來代替Statement會使程式碼多出幾行,但這樣的程式碼無論從可讀性還是可維護性上來說.都比直接用Statement的程式碼
jdbc中Statement和PreparedStatement有什麼區別?哪個效能更好?
Statement和PreparedStatement的功能主要是對sql語句的執行 區別 (1)Statement每執行一條sql語句就需要生成一條執行計劃,執行100條就需要100條執行計劃PreparedStatement在執行相同 功能的sql語句,但僅僅是引數不同