亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JDBC 概述(四)

2019-11-18 12:40:17
字體:
來源:轉載
供稿:網友

  4 - Statement
  4.1 概述
  Statement 對象用于將 SQL 語句發送到數據庫中。實際上有三種 Statement 對象,它們都作為在給定連接上執行 SQL 語句的包容器:Statement、PReparedStatement(它從 Statement 繼續而來)和 CallableStatement(它從PreparedStatement 繼續而來)。它們都專用于發送特定類型的 SQL 語句:Statement 對象用于執行不帶參數的簡單 SQL 語句;PreparedStatement 對象用于執行帶或不帶 IN 參數的預編譯 SQL 語句;CallableStatement 對象用于執行對數據庫已存儲過程的調用。
  Statement 接口提供了執行語句和獲取結果的基本方法。PreparedStatement 接口添加了處理 IN 參數的方法;而 CallableStatement 添加了處理 OUT 參數的方法。
  4.1.1 創建 Statement 對象
  建立了到特定數據庫的連接之后,就可用該連接發送 SQL 語句。Statement 對象用 Connection 的方法 createStatement 創建,如下列代碼段中所示:
  Connection con = DriverManager.getConnection(url, "sunny", "");
  Statement stmt = con.createStatement();
  為了執行 Statement 對象,被發送到數據庫的 SQL 語句將被作為參數提供給Statement 的方法:
  ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2");
  4.1.2 使用 Statement 對象執行語句
  Statement 接口提供了三種執行 SQL 語句的方法:executeQuery、executeUpdate 和 execute。使用哪一個方法由 SQL 語句所產生的內容決定。
  方法 executeQuery 用于產生單個結果集的語句,例如 SELECT 語句。
  方法 executeUpdate 用于執行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數據定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或DELETE 語句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一個整數,指示受影響的行數(即更新計數)。對于 CREATE TABLE 或DROP TABLE 等不操作行的語句,executeUpdate 的返回值總為零。
  方法 execute 用于執行返回多個結果集、多個更新計數或二者組合的語句。因為多數程序員不會需要該高級功能,所以本概述后面將在單獨一節中對其進行介紹。
  執行語句的所有方法都將關閉所調用的 Statement 對象的當前打開結果集(假如存在)。這意味著在重新執行 Statement 對象之前,需要完成對當前ResultSet 對象的處理。
  應注重,繼續了 Statement 接口中所有方法的 PreparedStatement 接口都有自己的 executeQuery、executeUpdate 和 execute 方法。Statement 對象本身不包
  SQL 語句,因而必須給 Statement.execute 方法提供 SQL 語句作為參數。PreparedStatement 對象并不將 SQL 語句作為參數提供給這些方法,因為它們已
  經包含預編譯 SQL 語句。CallableStatement 對象繼續這些方法的
  PreparedStatement 形式。對于這些方法的 PreparedStatement 或CallableStatement 版本,使用查詢參數將拋出 SQLException。
  4.1.3 語句完成
  當連接處于自動提交模式時,其中所執行的語句在完成時將自動提交或還原。語句在已執行且所有結果返回時,即認為已完成。對于返回一個結果集的executeQuery 方法,在檢索完 ResultSet 對象的所有行時該語句完成。對于方法executeUpdate,當它執行時語句即完成。但在少數調用方法 execute 的情況中,在檢索所有結果集或它生成的更新計數之后語句才完成。
  有些 DBMS 將已存儲過程中的每條語句視為獨立的語句;而另外一些則將整個過程視為一個復合語句。在啟用自動提交時,這種差別就變得非常重要,因為它影響什么時候調用 commit 方法。在前一種情況中,每條語句單獨提交;在后一種情況中,所有語句同時提交。
  4.1.4 關閉 Statement 對象
  Statement 對象將由 java 垃圾收集程序自動關閉。而作為一種好的編程風格,應在不需要 Statement 對象時顯式地關閉它們。這將立即釋放 DBMS 資源,有助于避免潛在的內存問題。
  4.1.5 Statement 對象中的 SQL 轉義語法
  Statement 可包含使用 SQL 轉義語法的 SQL 語句。轉義語法告訴驅動程序其中的代碼應該以不同方式處理。驅動程序將掃描任何轉義語法,并將它轉換成特定數據庫可理解的代碼。這使得轉義語法與 DBMS 無關,并答應程序員使用在沒有轉義語法時不可用的功能。
  轉義子句由花括號和要害字界定:
  {keyWord . . . parameters . . . }
  該要害字指示轉義子句的類型,如下所示。
  escape 表示 LIKE 轉義字符
  字符“%”和“_”類似于 SQL LIKE 子句中的通配符(“%”匹配零個或多個字符,而“_”則匹配一個字符)。為了正確解釋它們,應在其前面加上反斜杠(“”),它是字符串中的非凡轉義字符。在查詢末尾包括如下語法即可指定用作轉義字符的字符:
  {escape 'escape-character'}
  例如,下列查詢使用反斜杠字符作為轉義字符,查找以下劃線開頭的標識符名:
  stmt.executeQuery("SELECT name FROM Identifiers WHERE Id LIKE `/_%' {escape `'};
  fn 表示標量函數
  幾乎所有 DBMS 都具有標量值的數值、字符串、時間、日期、系統和轉換函數。要使用這些函數,可使用如下轉義語法:要害字 fn 后跟所需的函數名及其參數。例如,下列代碼調用函數 concat 將兩個參數連接在一起:
  {fn concat("Hot", "Java")};
  可用下列語法獲得當前數據庫用戶名:
  {fn user()};
  標量函數可能由語法稍有不同的 DBMS 支持,而它們可能不被所有驅動程序支持。各種 DatabaseMetaData 方法將列出所支持的函數。例如,方法getNumericFunctions 返回用逗號分隔的數值函數列表,而方法getStringFunctions 將返回字符串函數,等等。
  驅動程序將轉義函數調用映射為相應的語法,或直接實現該函數。
  d、t 和 ts 表示日期和時間文字
  DBMS 用于日期、時間和時間標記文字的語法各不相同。JDBC 使用轉義子句支持這些文字的語法的 ISO 標準格式。驅動程序必須將轉義子句轉換成 DBMS 表示。
  例如,可用下列語法在 JDBC SQL 語句中指定日期:
  {d `yyyy-mm-dd'}
  在該語法中,yyyy 為年代,mm 為月份,而 dd 則為日期。驅動程序將用等價的特定于 DBMS 的表示替換這個轉義子句。例如,假如 '28- FEB-99' 符合基本數據庫的格式,則驅動程序將用它替換 {d 1999-02-28}。
  對于 TIME 和 TIMESTAMP 也有類似的轉義子句:
  {t `hh:mm:ss'}
  {ts `yyyy-mm-dd hh:mm:ss.f . . .'}
  TIMESTAMP 中的小數點后的秒(.f . . .)部分可忽略。
  call 或 ? = call 表示已存儲過程
  假如數據庫支持已存儲過程,則可從 JDBC 中調用它們,語法為:
  {call procedure_name[(?, ?, . . .)]}
  或(其中過程返回結果參數):
  {? = call procedure_name[(?, ?, . . .)]}
  方括號指示其中的內容是可選的。它們不是語法的必要部分。
  輸入參數可以為文字或參數。有關具體信息,參見 JDBC 指南中第 7 節,“CallableStatement”。
  可通過調用方法 DatabaseMetaData.supportsStoredProcedures 檢查數據庫是否支持已存儲過程。
  oj 表示外部連接
  外部連接的語法為
  {oj outer-join}
  其中 outer-join 形式為
  table LEFT OUTER JOIN {table / outer-join} ON search-condition
  外部連接屬于高級功能。有關它們的解釋可參見 SQL 語法。JDBC 提供了三種DatabaseMetaData 方法用于確定驅動程序支持哪些外部連接類型:supportsOuterJoins、supportsFullOuterJoins 和supportsLimitedOuterJoins。
  方法 Statement.setEscapeProcessing 可打開或關閉轉義處理;缺省狀態為打開。當性能極為重要時,程序員可能想關閉它以減少處理時間。但通常它將出于打開狀態。應注重: setEscapeProcessing 不適用于 PreparedStatement 對象,因為在調用該語句前它就可能已被發送到數據庫。有關預編譯的信息,參見PreparedStatement。
  4.1.6 使用方法 execute
  execute 方法應該僅在語句能返回多個 ResultSet 對象、多個更新計數或ResultSet 對象與更新計數的組合時使用。當執行某個已存儲過程或動態執行未知 SQL 字符串(即應用程序程序員在編譯時未知)時,有可能出現多個結果的情況,盡管這種情況很少見。例如,用戶可能執行一個已存儲過程(使用CallableStatement 對象 - 參見第 135 頁的 CallableStatement),并且該已存儲過程可執行更新,然后執行選擇,再進行更新,再進行選擇,等等。通常使用已存儲過程的人應知道它所返回的內容。
  因為方法 execute 處理非常規情況,所以獲取其結果需要一些非凡處理并不足為怪。例如,假定已知某個過程返回兩個結果集,則在使用方法 execute 執行該過程后,必須調用方法 getResultSet 獲得第一個結果集,然后調用適當的getXXX 方法獲取其中的值。要獲得第二個結果集,需要先調用 getMoreResults方法,然后再調用 getResultSet 方法。假如已知某個過程返回兩個更新計數,則首先調用方法 getUpdateCount,然后調用 getMoreResults,并再次調用getUpdateCount。
  對于不知道返回內容,則情況更為復雜。假如結果是 ResultSet 對象,則方法execute 返回 true;假如結果是 Java int,則返回 false。假如返回 int,則意味著結果是更新計數或執行的語句是 DDL 命令。在調用方法 execute 之后要做的第一件事情是調用 getResultSet 或 getUpdateCount。調用方法 getResultSet可以獲得兩個或多個 ResultSet 對象中第一個對象;或調用方法 getUpdateCount 可以獲得兩個或多個更新計數中第一個更新計數的內容。
  當 SQL 語句的結果不是結果集時,則方法 getResultSet 將返回 null。這

上一篇:JDBC 概述(一)

下一篇:JDBC 概述(三)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人黄色小视频| 亚洲国模精品私拍| 一本色道久久88综合亚洲精品ⅰ| 国产日韩精品一区二区| 欧美精品电影在线| 久久成人综合视频| 亚洲一区二区三区777| 美日韩丰满少妇在线观看| 日韩欧美成人免费视频| 日韩在线观看视频免费| 日韩av免费在线观看| 国产精品久久久久久av下载红粉| 欧美精品九九久久| 亚洲影视九九影院在线观看| 91精品91久久久久久| 国产精品99久久久久久人| 亚洲精品98久久久久久中文字幕| www.亚洲成人| www欧美xxxx| 永久免费精品影视网站| 久久在线免费观看视频| 亚洲精品视频播放| 92国产精品久久久久首页| 26uuu日韩精品一区二区| 亚洲精品视频免费在线观看| 欧美电影在线播放| 国产精品∨欧美精品v日韩精品| 欧美黑人xxxⅹ高潮交| 成人久久久久爱| 久久久久久久久久av| 欧美成人激情视频免费观看| 亚洲成人av片在线观看| 奇米四色中文综合久久| 中文字幕亚洲情99在线| 国产精品久久婷婷六月丁香| 久久夜精品香蕉| 91产国在线观看动作片喷水| 亚洲网址你懂得| 亚洲国产97在线精品一区| 国产剧情日韩欧美| 欧美孕妇毛茸茸xxxx| 日本亚洲精品在线观看| 国产久一一精品| 日韩av手机在线| 日韩有码在线视频| 欧美极品第一页| 热99久久精品| 日韩欧美精品网址| 欧美性少妇18aaaa视频| 国产成人精品视频在线观看| 亚洲福利视频免费观看| 国产精品老牛影院在线观看| 成人国产在线视频| 亚洲深夜福利视频| 欧美疯狂性受xxxxx另类| 国产高清在线不卡| 日韩精品免费在线播放| 日韩极品精品视频免费观看| 国产精品激情自拍| 国产精品久久久久久一区二区| 亚洲自拍偷拍视频| 日韩亚洲第一页| 51精品国产黑色丝袜高跟鞋| 欧美老女人xx| 日本一本a高清免费不卡| 欧美日韩成人黄色| 51视频国产精品一区二区| 久久躁狠狠躁夜夜爽| 欧美精品福利在线| 欧美性少妇18aaaa视频| 在线视频欧美日韩精品| 国产日韩欧美成人| 亚洲经典中文字幕| 国产精品久久77777| 亚洲全黄一级网站| 91精品国产电影| 成人免费在线视频网站| 色噜噜狠狠狠综合曰曰曰| 欧美性猛交xxxx免费看久久久| 这里只有精品丝袜| 国产精品人成电影在线观看| 在线播放日韩精品| 欧美黑人性视频| 中文字幕久热精品视频在线| 精品久久久一区| 久久国产精品久久精品| 国产在线精品成人一区二区三区| 欧美日韩性视频在线| 亚洲激情电影中文字幕| 色综合久久久久久中文网| 国内精品久久久久久久| 亚洲精品国产精品国产自| 久久视频在线免费观看| 国产精品成人品| 国产精品精品视频| 成人国内精品久久久久一区| 日本中文字幕久久看| 日韩欧美精品网站| 欧美一区亚洲一区| 日韩欧美a级成人黄色| 国产日韩欧美日韩大片| 精品国产一区av| 国产日韩精品一区二区| 久久这里只有精品视频首页| 性欧美激情精品| 久久频这里精品99香蕉| 91香蕉嫩草影院入口| 亚洲欧美日韩精品久久亚洲区| 茄子视频成人在线| 伊人伊成久久人综合网小说| 国产亚洲一区精品| 色婷婷亚洲mv天堂mv在影片| 欧美性高潮在线| 欧美综合一区第一页| 国产精品免费一区| 亚洲天堂一区二区三区| 国产精品欧美日韩久久| 亚洲国产精品国自产拍av秋霞| 国产成人亚洲综合青青| 亚洲精品资源美女情侣酒店| 91午夜理伦私人影院| 国产精品扒开腿做| 一区二区三区www| 久久久久久久久网站| 国产男人精品视频| 欧洲成人午夜免费大片| 97色伦亚洲国产| 日韩精品免费在线视频观看| 久久这里有精品视频| 午夜精品久久久久久久白皮肤| 亚洲视频axxx| 欧美成人免费大片| 国产精品久久久| 中文字幕精品国产| 国产精品一二三在线| 热久久这里只有精品| 亚洲国产成人久久综合一区| 国产一区二区在线播放| 亚洲欧美中文日韩在线v日本| 色久欧美在线视频观看| 91社影院在线观看| 日韩在线精品一区| 欧美在线视频在线播放完整版免费观看| 国产精品久久久久高潮| 亚洲成人激情在线观看| 欧美大尺度激情区在线播放| 26uuu另类亚洲欧美日本老年| 亚洲网站视频福利| 精品中文字幕在线2019| 高清亚洲成在人网站天堂| 久久精品国产亚洲一区二区| 国产日韩欧美一二三区| 国产成人精品a视频一区www| 国产色视频一区| 精品视频在线播放免| 久久婷婷国产麻豆91天堂| 久久97久久97精品免视看| 久久精品夜夜夜夜夜久久| 日韩视频精品在线| 亚洲精品aⅴ中文字幕乱码| 国产女精品视频网站免费| 日韩成人久久久| 欧美日韩免费在线观看| 精品视频—区二区三区免费|