1. 程式人生 > >JDBC中PreparedStatement介面的使用

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:連結

相關推薦

JDBCPreparedStatement介面的使用

  在《java使用JDBC連線MySql資料庫》中說明了JDBC連結資料庫的基本方式,其中執行SQL語句使用的是Statement介面,這裡介紹一個更好用的介面,PreparedStantment介面。 PreparedStatement是什麼? pu

JDBCPreparedStatement介面的執行邏輯

PreparedStatement介面是Statement介面的子介面,其好處是建立PreparedStatement物件時直接使用Sql語句做引數,能自動解析和編譯Sql語句,省去了Sql語句拼接和編譯的麻煩,提高了安全性。一、舉個例子來說明PreparedStatemen

JDBCStatement介面PreparedStatement介面的差異性

Statement:用於執行SQL語句的工具介面。該物件及可以執行DDL/DCL語句,也可以用於執行DML語句,還可以用於執行SQL查詢,返回查詢到的結果集。常用方法如下:                 ResultSet executeQuery(String sql)throws SQLExceptio

JDBCPreparedStatement接口提供的execute、executeQuery和executeUpdate之間的區別及用法

ica cat nvi 一個 execute ear let ace 刪除 JDBC中PreparedStatement接口提供的execute、executeQuery和executeUpdate之間的區別及用法 (2012-08-27 09:36:18) 轉載▼

JDBCPreparedStatement

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 用於執

JDBCPreparedStatement用法程式碼示例

為了防止使用者使用sql語句注入攻擊資料庫,可以使用Statement介面的子介面 java.sql.PreparedStatement extends Statement 該介面表示預編譯的 SQL 語句的物件,SQL 語句被預編譯並存儲在 PreparedStateme

jdbcPreparedStatement不定引數的小技巧

      今天產品部需要幫忙弄個小專案,就只需建立一個數據表,頁面提供一些簡單的增刪改查,excel 匯出功能,由於時間緊,就不採取什麼SSH之類的重量級框架,直接用JSP+servlet+JDBC快速完成這個小專案。在查詢使用PreparedStatement時,發現如

jdbcPreparedStatement物件的幾個常用方法

很久沒有用過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 用於通用查詢,

JDBCStatement介面提供的execute、executeQuery和executeUpdate之間的區別

         方法executeQuery           用於產生單個結果集的語句,例如 SELECT 語句。 被使用最多的執行 SQL 語句的方法是 executeQuery。這個方法被用來執行 SELECT 語句,它幾乎是使用最多的 SQL 語句。          方法executeUp

JDBCStatement與PreparedStatement的區別

sql語句 使用 更改 spa ext form表單 時間 where 額外 1. statement每次執行sql語句,相關數據庫都要執行sql語句的編譯;preparedstatement是預編譯的, 采用Cache機制(預編譯語句,放在Cache中,下次執行相同SQL

JDBCStatement、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繼承封裝

使用JDBCPreparedStatement批量插入

工具類import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.sql.Connection; import java.sql.DriverManager; imp

錯誤筆記:JDBCStatement和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的程式碼

jdbcStatement和PreparedStatement有什麼區別?哪個效能更好?

Statement和PreparedStatement的功能主要是對sql語句的執行 區別 (1)Statement每執行一條sql語句就需要生成一條執行計劃,執行100條就需要100條執行計劃PreparedStatement在執行相同 功能的sql語句,但僅僅是引數不同