亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別

瀏覽:3日期:2022-08-28 17:17:10

Statement 和 PreparedStatement之間的關(guān)系和區(qū)別.

關(guān)系:PreparedStatement繼承自Statement,都是接口 區(qū)別:PreparedStatement可以使用占位符,是預(yù)編譯的,批處理比Statement效率高

詳解:

1、PreparedStatement:表示預(yù)編譯的 SQL 語句的對象。

接口:public interface PreparedStatement extends Statement之間的繼承關(guān)系 SQL 語句被預(yù)編譯并存儲(chǔ)在 PreparedStatement 對象中。然后可以使用此對象多次高效地執(zhí)行該語句。 注:用于設(shè)置 IN 參數(shù)值的設(shè)置方法(setShort、setString 等等)必須指定與輸入?yún)?shù)的已定義 SQL 類型兼容的類型。例如,如果 IN 參數(shù)具有 SQL 類型 INTEGER,那么應(yīng)該使用 setInt 方法,問號(hào)的位置也是應(yīng)該注意的,因?yàn)榈谝粋€(gè)問好的位置為1,第二個(gè)問號(hào)的位置為2.以此類推。 如果需要任意參數(shù)類型轉(zhuǎn)換,使用 setObject 方法時(shí)應(yīng)該將目標(biāo) SQL 類型作為其參數(shù)。 在以下設(shè)置參數(shù)的示例中,con 表示一個(gè)活動(dòng)連接: PreparedStatement pstmt = con.prepareStatement('UPDATE EMPLOYEES SALARY = ? WHERE ID = ?'); pstmt.setBigDecimal(1, 1533.00) pstmt.setInt(2, 1102) pstmt.execute()//注意提交時(shí)這里不能再有sql語句,不同于Statment

演示代碼:

import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Statement;public class PreparedStatementTest {public static void main(String[] args) {test_autoCommit();}public static void test_autoCommit(){String driver='oracle.jdbc.driver.OracleDriver';String url='jdbc:oracle:thin:@127.0.0.1:1521:orcl';String user='briup';String password='briup';Connection conn=null;PreparedStatement ps=null;try {//1、注冊驅(qū)動(dòng)Class.forName(driver);//2、獲取連接 conn= DriverManager.getConnection(url, user, password); //System.out.println(conn);//3、創(chuàng)建prepareStatement對象 String sql='insert into lover values(?,?,?)'; ps=conn.prepareStatement(sql); //4、執(zhí)行sql語句 ps.setInt(1,21);//代表設(shè)置給第一個(gè)?號(hào)位置的值為Int類型的21 ps.setString(2,'suwu150');//代表設(shè)置給第二個(gè)?號(hào)位置的值為String類型的suwu150 java.util.Date utilDate=new java.util.Date();//進(jìn)行類型轉(zhuǎn)換,由util類型的date轉(zhuǎn)化為sql類型的 ps.setDate(3, new java.sql.Date(utilDate.getTime())); //ps.execute();//執(zhí)行 System.out.println(ps.execute());//執(zhí)行表輸出返回的結(jié)果,結(jié)果為false,因?yàn)闆]有返回的結(jié)果集 //5、處理結(jié)果集} catch (Exception e) {e.printStackTrace();}finally{//6、關(guān)閉資源try {if(ps!=null)ps.close();} catch (SQLException e) {e.printStackTrace();}try {if(conn!=null)conn.close();} catch (SQLException e) {e.printStackTrace();}}}}

插入之后的結(jié)果

java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別

2、Statement:用于執(zhí)行靜態(tài) SQL 語句并返回它所生成結(jié)果的對象。

接口:public interface Statement extends Wrapper在默認(rèn)情況下,同一時(shí)間每個(gè) Statement 對象只能打開一個(gè) ResultSet 對象。因此,如果讀取一個(gè) ResultSet 對象與另一個(gè)交叉,則這兩個(gè)對象必須是由不同的 Statement 對象生成的。如果存在某個(gè)語句的打開的當(dāng)前 ResultSet 對象,則 Statement 接口中的所有執(zhí)行方法都會(huì)隱式關(guān)閉它。 如以下操作:創(chuàng)建statement對象 Statement stat=conn.createStatement(); String sql='insert into lover values(6,’suxingxing’,to_date(’21-9-2016’,’dd-mm-yyyy’))'; stat.execute(sql);//這里提交時(shí)應(yīng)該有sql語句,不同于PreparedStatment來看一下實(shí)際使用吧:

import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.Statement;public class StatementTest {public static void main(String[] args) {test_autoCommit();}public static void test_autoCommit() { String driver='oracle.jdbc.driver.OracleDriver'; String url='jdbc:oracle:thin:@127.0.0.1:1521:orcl'; String user='briup'; String password='briup'; Connection conn=null; Statement stat=null; try { //1、注冊驅(qū)動(dòng) Class.forName(driver); //2、獲取連接 conn= DriverManager.getConnection(url, user, password); conn.setAutoCommit(false); //System.out.println(conn); //3、創(chuàng)建statement對象 stat=conn.createStatement(); //4、執(zhí)行sql語句 String sql='insert into lover values(22,’suxingxing’,to_date(’21-9-2016’,’dd-mm-yyyy’))'; //注意格式 // stat.execute(sql); System.out.println(stat.execute(sql)); //返回值為false,因?yàn)橥瑯記]有ResultSet返回集 conn.commit(); //5、處理結(jié)果集 } catch (Exception e) { e.printStackTrace(); try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } finally{ //6、關(guān)閉資源 try { if(stat!=null)stat.close(); } catch (SQLException e) { e.printStackTrace(); } try { if(conn!=null)conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }}

插入之后的結(jié)果:

java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別

到此這篇關(guān)于java中Statement 與 PreparedStatement接口之間的關(guān)系和區(qū)別的文章就介紹到這了,更多相關(guān)Statement 與 PreparedStatement接口內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 超清波多野结衣精品一区 | 久久青草18免费观看网站 | 国产一区二区三区亚洲欧美 | 亚欧一区| 亚洲精品美女国产一区 | 亚洲精品第一页中文字幕 | 欧美成人性色大片在线观看 | 国产中文欧美 | 91免费观看视频 | 狠狠色丁香久久综合五月 | 亚洲国产精品久久婷婷 | 看一级毛片国产一级毛片 | 边做边摸边揉的免费视频 | 青青久在线精品视频 | 欧美人成在线观看网站高清 | 黑人性生活视频 | 最新九九精品 | 亚洲毛片大全 | 国产一级影院 | 国产一级毛片亚洲久留木玲 | 午夜性a一级毛片 | 欧美视频网站免费看 | 欧美特黄一级高清免费的香蕉 | 三级毛片三级毛片 | 亚洲精品一区二区三区中文字幕 | 欧美另类偷自拍视频二区 | 在线播放成人高清免费视频 | 日韩第一页在线 | 成人综合国产乱在线 | 中国女人a毛片免费全部播放 | 人成免费网站 | 1024手机在线 | 亚洲精品午夜一区二区在线观看 | 女人天堂网在线观看2019 | 亚洲精品一区二区综合 | 欧美成人乱弄视频 | 日本黄色福利视频 | 日本特黄特色大片免费视频观看 | 成年黄色片 | 成人在线免费视频播放 | 黄色片在线免费观看 |