JDBC入門教程(三) PreparedStatement的使用
前兩章我們寫了一個 DBTools 工具類,可以進行簡單的資料庫操作,但是有很大的侷限性,今天就來改善一下這個類,學習一個新的物件 PreparedStatement
- 為什麼要使用PreparedStatement
前面我們建立了一個store資料庫,並且建立了一個user資料表,表裡包含欄位 id ,account ,password ,role。而且還向裡面加入了一條資料 sql 語句是這樣寫的
INSERT INTO store.user (account,password,role) VALUES ('admin','123',1)
我直接把欄位的值直接寫在了sql語句裡,不過通常情況下,(‘admin’,’123’,1) 這裡面都是一些變數,為了方便,我們會建立一個實體類,來對應相應的資料庫表,現在新建一個 user 實體類
package com.jiaoshou.domain;
public class User {
//使用者的ID
private int id;
//使用者名稱
private String account;
//密碼
private String password;
//使用者角色
private int role;
//無參構造
public User() {
super();
}
//有參構造
public User(int id, String account, String password, int role) {
super();
this.id = id;
this.account = account;
this.password = password;
this.role = role;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getRole() {
return role;
}
public void setRole(int role) {
this.role = role;
}
}
假設現在又一個 user 實體,裡面封裝了我們需要的資料,我們要把這個 user 插入資料庫中,sql 語句就變成了
"INSERT INTO store.user (account,password,role) VALUES ("
+ user.getAccount() + ",'"
+ user.getPassword() + "',"
+ user.getRole() + ")";
由於我們要在 sql 語句中加入變數,所以我們不得不拼接字串,這種方式麻煩,效率低,容易出錯,安全性不高,PreparedStatement 物件就可以解決以上的問題。
2. 如何使用 PreparedStatement
使用 PreparedStatement 物件操作資料庫可以分為一下幾步
獲取資料庫連線
寫sql語句,設定佔位符,用 ?代替變數
建立PreparedStatement物件
為佔位符進行賦值
執行操作
釋放資源
下面我們就把上面提到的那個 user 使用PreparedStatement物件插入資料庫
@Test
public void insertUsers() throws SQLException {
User user = new User(2,"master","123",2);
//獲取資料庫連線
Connection conn = DBTools.getConnection();
//寫sql語句,設定佔位符,用 ?代替變數
String sql = "INSERT INTO store.user (account,password,role) VALUES (?,?,?)";
//建立 PreparedStatement 物件
PreparedStatement preparedStatement = conn.prepareStatement(sql);
//為佔位符進行賦值
preparedStatement.setString(1,user.getAccount());//第一個引數是第幾個佔位符,第二個引數是為這個佔位符進行賦值
preparedStatement.setString(2,user.getPassword());
preparedStatement.setInt(3,user.getRole());
//執行操作
preparedStatement.executeUpdate();
//釋放資源
DBTools.release(null, null, conn);
}
測試一下這個類。其他的delete update 方法也一樣
我們先前寫了一個通用的更新方法 update(String sql),很明顯我們不能只把這裡帶有佔位符的 sql 語句傳過去,還需要佔位符對應的值,所以要對前面的那個方法進行改進。這樣的話 update 方法就需要兩個形式引數,一個是帶有佔位符的 sql 語句,另一個是佔位符 對應的值。不過不同的 sql 語句佔位符的個數也是不同的,所以我們要用到可變引數 Object...args
方法改進如下:
//通用的更新方法
public static void update(String sql,Object...args){
Connection conn = null;
PreparedStatement preparedStatement = null;
try {
//獲取資料庫連線
conn = DBTools.getConnection();
//建立PreparedStatement物件
preparedStatement = conn.prepareStatement(sql);
//通過迴圈來給sql的佔位符賦值
for(int i=0;i<=args.length-1;i++){
preparedStatement.setObject(i+1, args[i]);
}
//執行更新操作
preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
release(null,null,conn);
}
}
測試一下這個通用方法,改一下 使用者名稱為 master 的密碼
@Test
public void updatePasswd() {
User user = new User();
user.setAccount("master");
user.setPassword("jiaoshou");
user.setRole(1);
String sql = "UPDATE store.user SET password=?, role=? WHERE account=?";
DBTools.update(sql, user.getPassword(),user.getRole(),user.getAccount());
}
測試一下,OK!!
下一章我們會對我們的查詢方法進行升級
相關推薦
JDBC入門教程(三) PreparedStatement的使用
前兩章我們寫了一個 DBTools 工具類,可以進行簡單的資料庫操作,但是有很大的侷限性,今天就來改善一下這個類,學習一個新的物件 PreparedStatement 為什麼要使用PreparedStatement 前面我們建立了一個store資料庫,並
Spring Cloud 入門教程(三): 配置自動刷新
入門 stc pro 解決方案 con log clas ring color 之前講的配置管理, 只有在應用啟動時會讀取到GIT的內容, 之後只要應用不重啟,GIT中文件的修改,應用無法感知, 即使重啟Config Server也不行。 比如上一單元(Spring Clo
超簡單的SpringClound入門教程(三.服務的消費者Feign)
上一篇,講了SpringClound中的消費者採用織帶+休息來實現,這回我們用元件Feign來實現服務的消費者,Fegin中也是預設集成了Ribbon的;和Eureka結合也能實現負載均衡; 概括來說,Fegin的區別就是基於註解來實現,具備可插拔的特性; 一,專案準備 這回我們要用的專案工程
scrapy入門教程(三)scrapy相關元件
前面兩步的準備工作完成之後,我們先不要著急開始工作,畢竟作為一個框架,還是很複雜的;貿然上手 開整,很容易陷入懵逼狀態啊!一團漿糊,理不清思路,後面的事情做起來很很麻煩啦! 我們來看看下面這張圖: (1)引擎(Engine) 引擎負責控制資料流在系統所有元件
無廢話SharePoint入門教程三[建立網站集和網站]
一、前言 前兩篇文章講解了什麼是SharePoint,並且介紹了在SharePoint中一些常用的概念。但概念終究是概念,我們還是要腳踏實地的去動手實踐。下面的文章對於瞭解SharePoint的人來說過於簡單,但由於本系列是入門教程,所以從最簡單的入手並一步一步深入
Scala基礎入門教程(三)
Tuples(元組): 在Python中的元組是不受限制的,在Scala中元組最多支援22項 因為在Scala中實際上是定義了22個類,分別是Tuple1,Tuple2,Tuple3一直到22個, 例子: object Demo1 extends App{
無廢話MVC入門教程三[路由設定及檢視入門]
MVC入門系列教程-視訊版本,已入駐51CTO學院,文字+視訊學效果更好哦。視訊連結地址如下: 點我檢視視訊。另外,針對該系列教程博主提供有償技術支援,群號:226090960,群內會針對該教程的問題進行及時解答,公用性問題統一講解。學習.NET MVC 只看在《無廢話系列》足夠了,《無廢話系列》簡單、快速、
無廢話WCF入門教程三[WCF的宿主]
1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration> 3 <system.serviceModel> 4 <services> 5 <service
Activiti入門教程三(詳解流程引擎配置)
在先前的部落格中提到了有關ProcessEngineConfiguration建立,但並沒有詳細的解釋,主要建立的幾個方法,那麼這篇部落格就來談一談有關ProcessEngineConfig
Android入門教程三之使用Eclipse+ADT+SDK開發安卓APP
前言: 1.這裡我們有兩條路可以選,直接使用封裝好的用於開發Android的ADT Bundle,或者自己進行配置 因為谷歌已經放棄了ADT的更新,官網上也取消的下載連結,這裡提供谷歌放棄更新前最新版本的 ADT Bundle供大家下載! 2.直接使用
Spring Boot入門教程(三十一): 自定義Starter
在springboot中,使用的最多的就是starter。starter可以理解為一個可拔插式的外掛,例如,你想使用jdbc外掛,那麼可以使用spring-boot-starter-jdbc;如果想使用mongodb,可以使用spring-boot-starte
MVC5 + EF6 完整入門教程三
期待已久的EF終於來了。 學完本篇文章,你將會掌握基於EF資料模型的完整開發流程。 本次將會完成EF資料模型的搭建和使用。 基於這個模型,將之前的示例新增資料庫查詢驗證功能。 文章提綱 概述 & 要點 詳細步驟 總結 概述 & 要點 下面是本文要點,正文部分會有
SpringCloud入門教程(三)配置管理
配置管理根據字面上理解,就是一些管理專案中使用到的一些配置檔案。以前開發單臺伺服器的時候,我們通過一個配置檔案就可以將平常用到的一些配置記錄下來,但是如果是搭建多臺叢集伺服器部署,當然也可以使用多個配置檔案,但是維護和同步就會比較麻煩。所以配置服務一般分兩種情況: 1.多臺
Rxjava2入門教程三:Operators操作符
Operators操作符 操作符(Operators):其實質是函數語言程式設計中的高階函式,是對響應式程式設計的各個過程拆分封裝後的產物。以便於我們操作資料流。 按照其作用具體可分為以下幾類: 建立:建立一個可觀察物件Observable併發射資料 過濾:從Observable發射
struts2入門教程三(上傳與下載)
package action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.struts2.ServletActionContext; im
Android入門教程三十之SeekBar(拖動條)
本節我們繼續來學習Android的基本UI控制元件中的拖動條——SeekBar,相信大家對他並不陌生,最常見的 地方就是音樂播放器或者視訊播放器了,音量控制或者播放進度控制,都用到了這個SeekBar,我們 先來看看SeekBar的類結構,來到官方文件:Seek
Java入門教程三(流程控制)
概述 程式有 3 種結構:順序結構、選擇結構和迴圈結構。分別為:if elseswitch case,while與do while,for, foreach,return,break ,continue if else if 選擇結構是根據條件判斷之後再做處理的一種語法結構。預設情況下,if 語句控制著下方緊
Spring Cloud 入門教程(三): 服務消費者(Feign)(Greenwich.RELEASE)
一、準備工作 同上節 二、新建maven 工程 service-feign (服務消費者 ) 1、修改pom.xm
CodeArt入門教程(三)
pan center account 根據 領域對象 保存 顏色 單一職責原則 用例 5.領域模型設計 下面我們創建賬戶子系統(AccountSubsystem),賬戶子系統雖然被門戶服務使用,但是子系統本身是獨立於任何服務存在的。所以我們為賬戶子系統創建獨立的項目解決
Dapper入門教程(三)——Dapper Query查詢
int32 method ppi ransac try spa can () raw 介紹 查詢方法(Query)是IDbConnection的擴展方法,它可以用來執行查詢(select)並映射結果到C#實體(Model、Entity)類 查詢結果可以映射成如下類型: A