Java中的PreparedStatement對象使用解析
Java的PreparedStatement對象
與Statement對象的區(qū)別
引入PreparedStatement對象是因為使用Statement對象容易被SQL注入,而PreparedStatement對象采用了預(yù)編譯的方法,會對傳入的參數(shù)進行強制類型檢查和安全檢查,進而避免了SQL注入的產(chǎn)生,使得操作更加安全(具體見博客內(nèi)的文章SQL注入簡介)
操作方法
編寫SQL語句
? 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語句中使用?占位符代替參數(shù)
- 創(chuàng)建對象的方法不同
- conn.createStatement();
- conn.prepareStatement(sql);
- PrepareStatement中使用預(yù)編譯SQL,先寫sql,然后不執(zhí)行
- 傳遞參數(shù)方法中第一個參數(shù)表示第幾個占位符,第二個參數(shù)則為該占位符的要傳遞的值
注意事項
占位符不能代替字段名
示例
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");
// 注意點:sql.Date是數(shù)據(jù)庫中使用的時間,java,sql.Date()
// util.Date是java中使用的時間,new Date().getTime()獲得當(dāng)前時間戳
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對象使用解析的文章就介紹到這了,更多相關(guān)Java的PreparedStatement對象內(nèi)容請搜索腳本之家以前的文章或繼續(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ù)庫連接PreparedStatement的使用詳解
- 詳解Java的JDBC中Statement與PreparedStatement對象
相關(guān)文章
如何使用Spring?integration在Springboot中集成Mqtt詳解
MQTT是多個客戶端通過一個中央服務(wù)器傳遞信息的多對多協(xié)議,能高效地將信息分發(fā)給一個或多個訂閱者,下面這篇文章主要給大家介紹了關(guān)于如何使用Spring?integration在Springboot中集成Mqtt的相關(guān)資料,需要的朋友可以參考下2023-02-02
創(chuàng)建Jersey REST 服務(wù),基于Maven的實現(xiàn)
下面小編就為大家?guī)硪黄獎?chuàng)建Jersey REST 服務(wù),基于Maven的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
spring無法引入注解及import org.springframework.web.bind.annota
本文主要介紹了spring無法引入注解及import org.springframework.web.bind.annotation.*報錯的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
服務(wù)性能優(yōu)化之mybatis-plus開啟與關(guān)閉SQL日志打印方法
這篇文章主要介紹了在Mybatis-plus中開啟和關(guān)閉控制臺SQL日志打印,在`application.properties`文件中,可以通過配置來實現(xiàn)SQL日志的開啟和關(guān)閉,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12

