Java之PreparedStatement的使用詳解
PreparedStatement介紹
- 可以通過調(diào)用 Connection 對象的 prepareStatement(String sql) 方法獲取 PreparedStatement 對象
- PreparedStatement 接口是 Statement 的子接口,它表示一條預(yù)編譯過的 SQL 語句
- PreparedStatement 對象所代表的 SQL 語句中的參數(shù)用問號(?)來表示(?在SQL中表示占位符),調(diào)用 PreparedStatement 對象的 setXxx() 方法來設(shè)置這些參數(shù). setXxx() 方法有兩個參數(shù),第一個參數(shù)是要設(shè)置的 SQL 語句中的參數(shù)的索引(從 1 開始),第二個是設(shè)置的 SQL 語句中的參數(shù)的值
PreparedStatement vs Statement
- 代碼的可讀性和可維護(hù)性。
- PreparedStatement 能最大可能提高性能:
- DBServer會對預(yù)編譯語句提供性能優(yōu)化。因為預(yù)編譯語句有可能被重復(fù)調(diào)用,所以語句在被DBServer的編譯器編譯后的執(zhí)行代碼被緩存下來,那么下次調(diào)用時只要是相同的預(yù)編譯語句就不需要編譯,只要將參數(shù)直接傳入編譯過的語句執(zhí)行代碼中就會得到執(zhí)行。
- 在statement語句中,即使是相同操作但因為數(shù)據(jù)內(nèi)容不一樣,所以整個語句本身不能匹配,沒有緩存語句的意義.事實是沒有數(shù)據(jù)庫會對普通語句編譯后的執(zhí)行代碼緩存。這樣每執(zhí)行一次都要對傳入的語句編譯一次。
- (語法檢查,語義檢查,翻譯成二進(jìn)制命令,緩存)
- PreparedStatement 可以防止 SQL 注入
插入案例
PreparedStatement常用的方法:
void setObject(int parameterIndex, Object x, int targetSqlType)
parameterIndex the first parameter is 1, the second is 2, …占位符參數(shù)索引是從1開始的
其余也是如此:
void setInt(int parameterIndex, int x)
void setLong(int parameterIndex, long x)
void setString(int parameterIndex, String x)
void setBlob (int parameterIndex, Blob x)
void setDate(int parameterIndex, java.sql.Date x, Calendar cal)
執(zhí)行操作:
package com.atmf; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; import org.junit.Test; public class SumUP { @Test public void getConnection() { Connection con = null; PreparedStatement ps = null; try { //1,加載配置文件 InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties"); Properties pr = new Properties(); pr.load(is); //2,讀取配置信息 String user = pr.getProperty("user"); String password = pr.getProperty("password"); String url = pr.getProperty("url"); String driverClass = pr.getProperty("driverClass"); //3.加載驅(qū)動 Class.forName(driverClass); //4,獲取連接 con = DriverManager.getConnection(url, user,password); String sql = "insert into customers(name,birth) value(?,?)"; //預(yù)編譯sql語句,得到PreparedStatement對象 ps = con.prepareStatement(sql); //5,填充占位符 ps.setString(1, "三明治"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse("2020-11-02"); ps.setDate(2, new java.sql.Date(date.getTime())); //6,執(zhí)行操作 ps.execute(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { //7,關(guān)閉資源 try { if(ps != null) ps.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if(con != null) con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
配置信息:jdbc.properties文件
user=root
password=123456
url=jdbc:mysql://localhost:3306/students
driverClass=com.mysql.jdbc.Driver
執(zhí)行結(jié)果:
到此這篇關(guān)于Java之PreparedStatement的使用詳解的文章就介紹到這了,更多相關(guān)Java之PreparedStatement內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java微信公眾平臺開發(fā)(5) 文本及圖文消息回復(fù)的實現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺開發(fā)第五步,回文本及圖文消息回復(fù)的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04Mybatis?plus多租戶方案的實戰(zhàn)踩坑記錄
MybaitsPlus多租戶處理器是一個對于多租戶問題的解決方案,下面這篇文章主要給大家介紹了關(guān)于Mybatis?plus多租戶方案踩坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12Fluent Mybatis零xml配置實現(xiàn)復(fù)雜嵌套查詢
本文主要介紹了Fluent Mybatis零xml配置實現(xiàn)復(fù)雜嵌套查詢,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08java swagger ui 添加header請求頭參數(shù)的方法
今天小編就為大家分享一篇java swagger ui 添加header請求頭參數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08Java圖片與二進(jìn)制相互轉(zhuǎn)換實現(xiàn)示例講解
這篇文章主要介紹了Java圖片與二進(jìn)制相互轉(zhuǎn)換實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-03-03java+MongoDB實現(xiàn)存圖片、下載圖片的方法示例
這篇文章主要介紹了java+MongoDB實現(xiàn)存圖片、下載圖片的方法,結(jié)合實例形式詳細(xì)分析了java結(jié)合MongoDB實現(xiàn)圖片的存儲與下載相關(guān)操作技巧,需要的朋友可以參考下2019-09-09Servlet的5種方式實現(xiàn)表單提交(注冊小功能),后臺獲取表單數(shù)據(jù)實例
這篇文章主要介紹了Servlet的5種方式實現(xiàn)表單提交(注冊小功能),后臺獲取表單數(shù)據(jù)實例,非常具有實用價值,需要的朋友可以參考下2017-05-05