Java中的PreparedStatement對(duì)象使用解析
Java的PreparedStatement對(duì)象
與Statement對(duì)象的區(qū)別
引入PreparedStatement對(duì)象是因?yàn)槭褂肧tatement對(duì)象容易被SQL注入,而PreparedStatement對(duì)象采用了預(yù)編譯的方法,會(huì)對(duì)傳入的參數(shù)進(jìn)行強(qiáng)制類(lèi)型檢查和安全檢查,進(jìn)而避免了SQL注入的產(chǎn)生,使得操作更加安全(具體見(jiàn)博客內(nèi)的文章SQL注入簡(jiǎn)介)
操作方法
編寫(xiě)SQL語(yǔ)句
? String sql = "select * from users where id = ?"; ? String sql = "insert into users(id,name,password,email,birthday) values(?,?,?,?,?)" ? String sql = "updateaccountset money = money - ? whereid= ?";
預(yù)編譯
? st = conn.prepareStatement();
傳遞參數(shù)
? st.setInt(1,2);
執(zhí)行
? rs = st.executeQuery();
使用方法的區(qū)別
- SQL語(yǔ)句中使用?占位符代替參數(shù)
- 創(chuàng)建對(duì)象的方法不同
- conn.createStatement();
- conn.prepareStatement(sql);
- PrepareStatement中使用預(yù)編譯SQL,先寫(xiě)sql,然后不執(zhí)行
- 傳遞參數(shù)方法中第一個(gè)參數(shù)表示第幾個(gè)占位符,第二個(gè)參數(shù)則為該占位符的要傳遞的值
注意事項(xiàng)
占位符不能代替字段名
示例
package com.test;
import com.test.second.JdbcUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
public class PrepareTest {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try {
conn = JdbcUtils.getConnection();
String sql = "insert into users(id,`name`,`password`,`email`,`birthday`) values(?,?,?,?,?)";
st = conn.prepareStatement(sql);
st.setInt(1,1);
st.setString(2,"cyh");
st.setString(3,"123456");
st.setString(4,"1294967895@qq.com");
// 注意點(diǎn):sql.Date是數(shù)據(jù)庫(kù)中使用的時(shí)間,java,sql.Date()
// util.Date是java中使用的時(shí)間,new Date().getTime()獲得當(dāng)前時(shí)間戳
st.setDate(5,new java.sql.Date(new Date().getTime()));
// i返回操作數(shù)據(jù)數(shù)
int i = st.executeUpdate();
if(i>0){
System.out.println("插入成功");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtils.release(conn,st,rs);
}
}
}到此這篇關(guān)于Java中的PreparedStatement對(duì)象使用解析的文章就介紹到這了,更多相關(guān)Java的PreparedStatement對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java中PreparedStatement的用法解析
- Java PreparedStatement用法詳解
- Java之PreparedStatement的使用詳解
- java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別
- java中PreparedStatement和Statement詳細(xì)講解
- Java使用PreparedStatement接口及ResultSet結(jié)果集的方法示例
- Java數(shù)據(jù)庫(kù)連接PreparedStatement的使用詳解
- 詳解Java的JDBC中Statement與PreparedStatement對(duì)象
相關(guān)文章
基于Process#waitFor()阻塞問(wèn)題的解決
這篇文章主要介紹了Process#waitFor()阻塞問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
java 使用策略模式操作JDBC數(shù)據(jù)庫(kù)
這篇文章主要介紹了java 使用策略模式操作JDBC數(shù)據(jù)庫(kù)的相關(guān)資料,這里提供實(shí)例實(shí)現(xiàn)對(duì)JDBC數(shù)據(jù)庫(kù)的操作增刪改查的功能,需要的朋友可以參考下2017-08-08
Spring Boot中的YML配置列表及應(yīng)用小結(jié)
在Spring Boot中使用YAML進(jìn)行列表的配置不僅簡(jiǎn)潔明了,還能提高代碼的可讀性和可維護(hù)性,這篇文章主要介紹了Spring Boot中的YML配置列表的詳細(xì)解析,需要的朋友可以參考下2025-05-05
java_String和StringBuffer區(qū)別分析
JAVA平臺(tái)提供了兩個(gè)類(lèi):String和StringBuffer,它們可以?xún)?chǔ)存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。這個(gè)String類(lèi)提供了數(shù)值不可改變的字符串。2013-04-04
學(xué)生視角看Java 面向?qū)ο蟮睦^承本質(zhì)
繼承是java面向?qū)ο缶幊碳夹g(shù)的一塊基石,因?yàn)樗试S創(chuàng)建分等級(jí)層次的類(lèi)。繼承就是子類(lèi)繼承父類(lèi)的特征和行為,使得子類(lèi)對(duì)象(實(shí)例)具有父類(lèi)的實(shí)例域和方法,或子類(lèi)從父類(lèi)繼承方法,使得子類(lèi)具有父類(lèi)相同的行為2022-03-03
Mybatis查詢(xún)返回Map<String,Object>類(lèi)型的實(shí)現(xiàn)
本文主要介紹了Mybatis查詢(xún)返回Map<String,Object>類(lèi)型的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
spring data jpa 查詢(xún)自定義字段,轉(zhuǎn)換為自定義實(shí)體方式
這篇文章主要介紹了spring data jpa 查詢(xún)自定義字段,轉(zhuǎn)換為自定義實(shí)體方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
SpringCloud創(chuàng)建多模塊項(xiàng)目的實(shí)現(xiàn)示例
,Spring Cloud作為一個(gè)強(qiáng)大的微服務(wù)框架,提供了豐富的功能和組件,本文主要介紹了SpringCloud創(chuàng)建多模塊項(xiàng)目的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02

