Java中PreparedStatement的用法解析
一、 簡介:
JDBC的最基本的使用過程
- 加載驅動類:Class.forName()
- 獲取數(shù)據(jù)庫連接:DriverManager.getConnection()
- 創(chuàng)建SQL語句執(zhí)行句柄:Connection.createStatement()
- 執(zhí)行SQL語句:Statement.executeUpdate()
- 釋放數(shù)據(jù)庫連接資源:finally,Connection.close()
應該始終以PreparedStatement代替Statement.也就是說,在任何時候都不要使用Statement.原因如下。
1. 代碼的可讀性和可維護性
??stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')"); perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)"); perstmt.setString(1,var1); perstmt.setString(2,var2); perstmt.setString(3,var3); perstmt.setString(4,var4); perstmt.executeUpdate();
2. 盡最大可能提高性能
整個DB中,只要預編譯的語句語法和緩存中匹配,而statement的語句中,即使是相同一操作,而由于每次操作的數(shù)據(jù)不同所以使整個語句相匹配的機會極小,幾乎不太可能匹配
二、PreparedStatement用法:
一個preparedstatement是從java.sql.connection對象和所提供的sql字符串得到的,sql字符串中包含問號(?),這些問號標明變量的位置,然后提供變量的值,最后執(zhí)行語句,例如:
stringsql = "select * from people p where p.id = ? and p.name = ?"; preparedstatement ps = connection.preparestatement(sql); ps.setint(1,id); ps.setstring(2,name); resultset rs = ps.executequery();
private static void preparedStatement() { // 總結一下JDBC的最基本的使用過程 // 1、加載驅動類:Class.forName() // 2、獲取數(shù)據(jù)庫連接:DriverManager.getConnection() // 3、創(chuàng)建SQL語句執(zhí)行句柄:Connection.createStatement() // 4、執(zhí)行SQL語句:Statement.executeUpdate() // 5、釋放數(shù)據(jù)庫連接資源:finally,Connection.close() // 定義數(shù)據(jù)庫連接對象 // 引用JDBC相關的所有接口或者是抽象類的時候,必須是引用java.sql包下的 // java.sql包下的,才代表了java提供的JDBC接口,只是一套規(guī)范 // 至于具體的實現(xiàn),則由數(shù)據(jù)庫驅動來提供,切記不要引用諸如com.mysql.jdbc包的類 Connection conn=null; //定義SQL語句執(zhí)行句柄:PrepareStatement對象 //PreparedStatement對象,其實就是底層會基于Connection數(shù)據(jù)庫連接 //可以讓我們方便的針對數(shù)據(jù)庫中的表,執(zhí)行增刪改查的SQL語句 //比如和insert update delete和select語句 PreparedStatement ps=null; try { // 第一步,加載數(shù)據(jù)庫的驅動,我們都是面向java.sql包下的接口在編程,所以 // 要想讓JDBC代碼能夠真正操作數(shù)據(jù)庫,那么就必須第一步先加載進來你要操作的數(shù)據(jù)庫的驅動類 // 使用Class.forName()方式來加載數(shù)據(jù)庫的驅動類 // Class.forName()是Java提供的一種基于反射的方式,直接根據(jù)類的全限定名(包+類) // 從類所在的磁盤文件(.class文件)中加載類對應的內(nèi)容,并創(chuàng)建對應的Class對象 Class.forName("com.mysql.jdbc.Driver"); // 獲取數(shù)據(jù)庫的連接 // 使用DriverManager.getConnection()方法獲取針對數(shù)據(jù)庫的連接 // 需要給方法傳入三個參數(shù),包括url、user、password // 其中url就是有特定格式的數(shù)據(jù)庫連接串,包括“主協(xié)議:子協(xié)議://主機名:端口號//數(shù)據(jù)庫” conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/spark_project?characterEncoding=utf8", "root", "root" ); // 基于數(shù)據(jù)庫連接Connection對象,創(chuàng)建SQL語句執(zhí)行句柄,Statement對象 // prepareStatement對象,就是用來基于底層的Connection代表的數(shù)據(jù)庫連接 // 允許我們通過java程序,通過prepareStatement對象,向MySQL數(shù)據(jù)庫發(fā)送SQL語句 // 從而實現(xiàn)通過發(fā)送的SQL語句來執(zhí)行增刪改查等邏輯 // 第一個,SQL語句中,值所在的地方,都用問好代表 String sql = "insert into user(name,age) values(?,?)"; ps = conn.prepareStatement(sql); // 第二個,必須調(diào)用PreparedStatement的setX()系列方法,對指定的占位符設置實際的值 ps.setString(1,"李四"); ps.setInt(2,26); // Statement.executeUpdate()方法,就可以用來執(zhí)行insert、update、delete語句 // 返回類型是個int值,也就是SQL語句影響的行數(shù) // 第三個,執(zhí)行SQL語句時,直接使用executeUpdate()即可,不用傳入任何參數(shù) int rtn = ps.executeUpdate(); System.out.println("SQL語句影響了【" + rtn + "】行。"); }catch (Exception e){ e.printStackTrace(); }finally { try { // 最后一定要記得在finally代碼塊中,盡快在執(zhí)行完SQL語句之后,就釋放數(shù)據(jù)庫連接 if (ps != null){ ps.close(); } if (conn !=null){ conn.close(); } }catch (Exception e){ e.printStackTrace(); } } }
到此這篇關于Java中PreparedStatement的用法解析的文章就介紹到這了,更多相關PreparedStatement用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Windows同時配置兩個jdk環(huán)境變量的操作步驟
Java Development Kit (JDK) 是開發(fā)Java應用程序的基礎,包含了編譯器、調(diào)試器以及其他必要的工具,本指南將一步步指導您完成在Windows操作系統(tǒng)上同時配置兩個jdk環(huán)境變量的操作步驟,需要的朋友可以參考下2024-09-09java讀取文件:char的ASCII碼值=65279,顯示是一個空字符的解決
這篇文章主要介紹了java讀取文件:char的ASCII碼值=65279,顯示是一個空字符的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Java @Transactional與synchronized使用的問題
這篇文章主要介紹了Java @Transactional與synchronized使用的問題,了解內(nèi)部原理是為了幫助我們做擴展,同時也是驗證了一個人的學習能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會的2023-01-01Servlet3.0學習總結之基于Servlet3.0的文件上傳實例
本篇文章主要介紹了Servlet3.0學習總結之基于Servlet3.0的文件上傳實例,具有一定的參考價值,有興趣的可以了解一下2017-07-07IDEA設置Maven自動編譯model的實現(xiàn)方法
本文主要介紹了IDEA設置Maven自動編譯model的實現(xiàn)方法, maven結構的項目,我們在每次修改代碼后都會需要手動編譯,本文就可以解決這個問題,感興趣的可以了解一下2023-08-08java正則表達式表單驗證類工具類(驗證郵箱、手機號碼、qq號碼等)
這篇文章主要介紹了java使用正則表達式進行表單驗證工具類,可以驗證郵箱、手機號碼、qq號碼等方法,需要的朋友可以參考下2014-04-04