當前位置:首頁 » 編程語言 » tableapi和sql語句
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

tableapi和sql語句

發布時間: 2022-04-11 00:56:14

① jdbc是什麼,和PL/sql developer是什麼關系

定義
JDBC(Java Data Base Connectivity,java資料庫連接)是一種用於執行SQL語句的Java API,可以為多種關系資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC為工具/資料庫開發人員提供了一個標準的API,據此可以構建更高級的工具和介面,使資料庫開發人員能夠用純 Java API 編寫資料庫應用程序,同時,JDBC也是個商標名。 有了JDBC,向各種關系數據發送SQL語句就是一件很容易的事。換言之,有了JDBC API,就不必為訪問Sybase資料庫專門寫一個程序,為訪問Oracle資料庫又專門寫一個程序,或為訪問Informix資料庫又編寫另一個程序等等,程序員只需用JDBC API寫一個程序就夠了,它可向相應資料庫發送SQL調用。同時,將Java語言和JDBC結合起來使程序員不必為不同的平台編寫不同的應用程序,只須寫一遍程序就可以讓它在任何平台上運行,這也是Java語言「編寫一次,處處運行」的優勢。 Java資料庫連接體系結構是用於Java應用程序連接資料庫的標准方法。JDBC對Java程序員而言是API,對實現與資料庫連接的服務提供商而言是介面模型。作為API,JDBC為程序開發提供標準的介面,並為資料庫廠商及第三方中間件廠商實現與資料庫的連接提供了標准方法。JDBC使用已有的SQL標准並支持與其它資料庫連接標准,如ODBC之間的橋接。JDBC實現了所有這些面向標準的目標並且具有簡單、嚴格類型定義且高性能實現的介面。 Java 具有堅固、安全、易於使用、易於理解和可從網路上自動下載等特性,是編寫資料庫應用程序的傑出語言。所需要的只是 Java應用程序與各種不同資料庫之間進行對話的方法。而 JDBC 正是作為此種用途的機制。 JDBC 擴展了 Java 的功能。例如,用 Java 和 JDBC API 可以發布含有 applet 的網頁,而該 applet 使用的信息可能來自遠程資料庫。企業也可以用 JDBC 通過 Intranet 將所有職員連到一個或多個內部資料庫中(即使這些職員所用的計算機有 Windows、 Macintosh 和UNIX 等各種不同的操作系統)。隨著越來越多的程序員開始使用Java 編程語言,對從 Java 中便捷地訪問資料庫的要求也在日益增加。 MIS 管理員們都喜歡 Java 和 JDBC 的結合,因為它使信息傳播變得容易和經濟。企業可繼續使用它們安裝好的資料庫,並能便捷地存取信息,即使這些信息是儲存在不同資料庫管理系統上。新程序的開發期很短。安裝和版本控制將大為簡化。程序員可只編寫一遍應用程序或只更新一次,然後將它放到伺服器上,隨後任何人就都可得到最新版本的應用程序。對於商務上的銷售信息服務, Java 和JDBC 可為外部客戶提供獲取信息更新的更好方法。
[編輯本段]用途
簡單地說,JDBC 可做三件事:與資料庫建立連接、發送 操作資料庫的語句並處理結果。下列代碼段給出了以上三步的基本示例: Connection con = DriverManager.getConnection("jdbc:odbc:wombat","login", "password"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) { int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c"); } 上述代碼對基於JDBC的資料庫訪問做了經典的總結,當然,在本小節的後續部分會對它做詳盡的分析講解。
[編輯本段]API
JDBC 是個"低級"介面,也就是說,它用於直接調用 SQL 命令。在這方面它的功能極佳,並比其它的資料庫連接 API 易於使用,但它同時也被設計為一種基礎介面,在它之上可以建立高級介面和工具。高級介面是"對用戶友好的"介面,它使用的是一種更易理解和更為方便的 API,這種API在幕後被轉換為諸如 JDBC 這樣的低級介面。 在關系資料庫的"對象/關系"映射中,表中的每行對應於類的一個實例,而每列的值對應於該實例的一個屬性。於是,程序員可直接對 Java 對象進行操作;存取數據所需的 SQL 調用將在"掩蓋下"自動生成。此外還可提供更復雜的映射,例如將多個表中的行結合進一個 Java 類中。 隨著人們對 JDBC 的興趣日益增漲,越來越多的開發人員一直在使用基於 JDBC 的工具,以使程序的編寫更加容易。程序員也一直在編寫力圖使最終用戶對資料庫的訪問變得更為簡單的應用程序。例如應用程序可提供一個選擇資料庫任務的菜單。任務被選定後,應用程序將給出提示及空白供填寫執行選定任務所需的信息。所需信息輸入應用程序將自動調用所需的 SQL 命令。在這樣一種程序的協助下,即使用戶根本不懂 SQL 的語法,也可以執行資料庫任務。
[編輯本段]與ODBC和其它API的比較
目前,Microsoft 的 ODBC API 可能是使用最廣的、用於訪問關系資料庫的編程介面。它能在幾乎所有平台上連接幾乎所有的資料庫。為什麼 Java 不使用 ODBC?對這個問題的回答是:Java 可以使用 ODBC,但最好是在 JDBC 的幫助下以 JDBC-ODBC 橋的形式使用,這一點我們稍後再說。現在的問題已變成:"為什麼需要 JDBC"?答案是顯然的:ODBC 不適合直接在 Java 中使用,因為它使用 C 語言介面。從Java 調用本地 C 代碼在安全性、實現、堅固性和程序的自動移植性方面都有許多缺點。從 ODBC C API 到 Java API 的字面翻譯是不可取的。例如,Java 沒有指針,而 ODBC 卻對指針用得很廣泛(包括很容易出錯的指針"void *")。您可以將 JDBC 想像成被轉換為面向對象介面的 ODBC,而面向對象的介面對 Java 程序員來說較易於接受。 ODBC 很難學。它把簡單和高級功能混在一起,而且即使對於簡單的查詢,其選項也極為復雜。相反,JDBC 盡量保證簡單功能的簡便性,而同時在必要時允許使用高級功能。啟用"純 Java "機制需要象 JDBC 這樣的 Java API。如果使用ODBC,就必須手動地將 ODBC 驅動程序管理器和驅動程序安裝在每台客戶機上。如果完全用 Java 編寫 JDBC 驅動程序則 JDBC 代碼在所有 Java 平台上(從網路計算機到大型機)都可以自 動安裝、移植並保證安全性。 總之,JDBC API 對於基本的 SQL 抽象和概念是一種自然的 Java 介面。它建立在 ODBC 上而不是從零開始。因此,熟悉 ODBC 的程序員將發現 JDBC 很容易使用。JDBC 保留了 ODBC 的基本設計特徵;事實上,兩種介面都基於 X/Open SQL CLI(調用級介面)。它們之間最大的區別在於:JDBC 以 Java 風格與優點為基礎並進行優化,因此更加易於使用。 目前,Microsoft 又引進了 ODBC 之外的新 API: RDO、 ADO 和OLE DB。這些設計在許多方面與 JDBC 是相同的,即它們都是面向對象的資料庫介面且基於可在 ODBC 上實現的類。但在這些介面中,我們未看見有特別的功能使我們要轉而選擇它們來替代 ODBC,尤其是在 ODBC 驅動程序已建立起較為完善的市場的情況下。它們最多也就是在 ODBC 上加了一種裝飾而已。
[編輯本段]對B/S和C/S模式的支持
JDBC API 既支持資料庫訪問的兩層模型(C/S),同時也支持三層模型(B/S)。在兩層模型中,Java applet或應用程序將直接與資料庫進行對話。這將需要一個JDBC驅動程序來與所訪問的特定資料庫管理系統進行 通訊。用戶的SQL語句被送往資料庫中,而其結果將被送回給用戶。資料庫可以位於另一台計算機上,用戶通過網路連接到上面。這就叫做客戶機/伺服器配置,其中用戶的計算機為客戶機,提供資料庫的計算機為伺服器。網路可以是 Intranet(它可將公司職員連接起來),也可以是 Internet。 在三層模型中,命令先是被發送到服務的"中間層",然後由它將SQL 語句發送給資料庫。資料庫對 SQL 語句進行處理並將結果送回到中間層,中間層再將結果送回給用戶。MIS 主管們都發現三層模型很吸引人,因為可用中間層來控制對公司數據的訪問和可作的的更新的種類。中間層的另一個好處是,用戶可以利用易於使用的高級API,而中間層將把它轉換為相應的低級調用。最後,許多情況下三層結構可提供一些性能上的好處。 到目前為止,中間層通常都用 C 或 C++ 這類語言來編寫,這些語言執行速度較快。然而,隨著最優化編譯器(它把 Java 位元組代碼轉換為高效的特定於機器的代碼)的引入,用 Java 來實現中間層將變得越來越實際。這將是一個很大的進步,它使人們可以充分利用 Java 的諸多優點(如堅固、多線程和安全等特徵)。JDBC 對於從Java的中間層來訪問資料庫非常重要。
[編輯本段]SQL的一致性
結構化查詢語言 (SQL) 是訪問關系資料庫的標准語言。困難之處在於:雖然大多數的 DBMS (資料庫管理系統)對其基本功能都使用了標准形式的 SQL,但它們卻不符合最近為更高級的功能定義的標准 SQL 語法或語義。例如,並非所有的資料庫都支持儲存程序或外部連接,那些支持這一功能的資料庫又相互不一致。人們希望 SQL 中真正標準的那部份能夠進行擴展以包括越來越多的功能。但同時 JDBC API 又必須支持現有的 SQL。 JDBC API 解決這個問題的一種方法是允許將任何查詢字元串一直傳到所涉及的 DBMS 驅動程序上。這意味著應用程序可以使用任意多的 SQL 功能,但它必須冒這樣的風險:有可能在某些 DBMS 上出錯。事實上,應用程序查詢甚至不一定要是 SQL,或者說它可以是個為特定的 DBMS 設計的 SQL 的專用派生物(例如,文檔或圖象查詢)。 JDBC 處理 SQL 一致性問題的第二種方法是提供 ODBC 風格的轉義子句,這將在後續部分中討論。轉義語法為幾個常見的 SQL 分歧提供了一種標準的 JDBC 語法。例如,對日期文字和已儲存過程的調用都有轉義語法。 對於復雜的應用程序,JDBC 用第三種方法來處理 SQL 的一致性問題它利用 DatabaseMetaData 介面來提供關於 DBMS 的描述性信息,從而使應用程序能適應每個 DBMS 的要求和功能。 由於 JDBC API 將用作開發高級資料庫訪問工具和 API 的基礎 API,因此它還必須注意其所有上層建築的一致性。"符合JDBC標准TM" 代表用戶可依賴的 JDBC 功能的標准級別。要使用這一說明,驅動程序至少必須支持 ANSI SQL-2 Entry Level(ANSI SQL-2 代表美國國家標准局 1992 年所採用的標准。Entry Level代表SQL功能的特定清單)。驅動程序開發人員可用 JDBC API 所帶的測試工具包來確定他們的驅動程序是否符合這些標准。 "符合 JDBC 標准TM" 表示提供者的 JDBC 實現已經通過了JavaSoft 提供的一致性測試。這些一致性測試將檢查 JDBC API中定義的所有類和方法是否都存在,並盡可能地檢查程序是否具有SQL Entry Level 功能。當然,這些測試並不完全,而且 JavaSoft 目前也無意對各提供者的實現進行標級。但這種一致性定義的確可對JDBC實現提供一定的可信度。隨著越來越多的資料庫提供者、連接提供者、Internet 提供者和應用程序編程員對 JDBC API 的接受,JDBC 也正迅速成為 Java 資料庫訪問的標准。
[編輯本段]入門-建立聯接
裝載驅動程序
你需要做的第一事情是你與想要使用的 DBMS 建立一個連接。這包含 2 個步驟:裝載驅動程序並建立連接。 裝載驅動程序只需要非常簡單的一行代碼。例如,你想要使用 JDBC-ODBC 橋驅動程序, 可以用下列代碼裝載它: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 你的驅動程序文檔將告訴你應該使用的類名。例如, 如果類名是 jdbc.DriverXYZ ,你將用代碼以下的代碼裝載驅動程序: Class.forName("jdbc.DriverXYZ"); 你不需要創建一個驅動程序類的實例並且用 DriverManager 登記它,因為調用 Class.forName 將自動將載入驅動程序類。如果你曾自己創建實例,你將創建一個不必要的副本,但它不會帶來什麼壞處。 載入 Driver 類後,它們即可用來與資料庫建立連接。
建立連接
第二步就是用適當的驅動程序類與 DBMS 建立一個連接。下列代碼是一般的做法: Connection con = DriverManager.getConnection(url, "myLogin", "myPassword"); 這個步驟也非常簡單,最難的是怎麼提供 url。如果你正在使用 JDBC-ODBC 橋, JDBC URL 將以 jdbc:odbc 開始:餘下 URL 通常是你的數據源名字或資料庫系統。因此,假設你正在使用 ODBC 存取一個叫 "Fred" 的 ODBC 數據源,你的 JDBC URL 是 jdbc:odbc:Fred 。把 "myLogin" 及 "myPassword" 替換為你登陸 DBMS 的用戶名及口令。如果你登陸資料庫系統的用戶名為 "Fernanda" 口令為 "J8",只需下面的 2 行代碼就可以建立一個連接: String url = "jdbc:odbc:Fred"; Connection con = DriverManager.getConnection(url,"Fernanda", "J8"); 如果你使用的是第三方開發了的 JDBC驅動程序,文檔將告訴你該使用什麼 subprotocol, 就是在 JDBC URL 中放在 jdbc 後面的部分。例如, 如果驅動程序開發者注冊了 acme 作為 subprotocol, JDBC URL 的第一和第二部分將是 jdbc:acme。驅動程序文檔也會告訴你餘下 JDBC URL 的格式。JDBC URL 最後一部分提供了定位資料庫的信息。 如果你裝載的驅動程序識別了提供給 DriverManager.getConnection 的 JDBC URL ,那個驅動程序將根據 JDBC URL 建立一個到指定 DBMS 的連接。正如名稱所示,DriverManager 類在幕後為你管理建立連接的所有細節。除非你是正在寫驅動程序,你可能無需使用此類的其它任何方法,一般程序員需要在此類中直接使用的唯一方法是 DriverManager.getConnection。 DriverManager.getConnection 方法返回一個打開的連接,你可以使用此連接創建 JDBC statements 並發送 SQL 語句到資料庫。在前面的例子里,con 對象是一個打開的連接,並且我們要在以後的例子里使用它。
[編輯本段]入門-設置表
創建表
首先,我們在我們的示例資料庫創建其中一張表 COFFEES,包含在咖啡店所賣咖啡的必要的信息,包括咖啡名字,他們的價格,本星期賣了多少磅及迄今為止賣的數目。關於 COFFEES 表我們以後會詳細描述,如下: 我們寫了創建 COFFEES 表的 SQL 語句。現在我們在它外面加上引號(使它成為字元串),並且字元串賦值給變數 createTableCoffees,在以後的 JDBC 代碼中我們可以使用此變數。正如看到的,DBMS 並不在意分行,但對 Java 語言來,String 對象分行是通不過編譯的。因而,我們可以用加號 (+) 把每一行的串連接。 String createTableCoffees = "CREATE TABLE COFFEES " + "(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " + "SALES INTEGER, TOTAL INTEGER)"; 我們在 CREATE TABLE 語句中使用的數據類型是通用的 SQL 類型(也稱 JDBC 類型)它們在類 java.sql.Types 中定義。DBMSs 通常使用這些標準的類型,因此,當你要嘗試一些 JDBC 應用程序時,你可以直接使用 CreateCoffees.java 應用程序,它使用了 CREATE TABLE 語句。如果你的 DBMS 使用了它的自己的本地的類型名字,我們為你供應其它的應用程序,我們將在後面詳細解釋。 在運用任何應用程序前,當然,我們將讓你了解 JDBC 的基礎。
創建對象
Statement 對象用於把 SQL 語句發送到 DBMS 。你只須簡單地創建一個 Statement 對象並且然後執行它,使用適當的方法執行你發送的 SQL 語句。對 SELECT 語句來說,可以使用 executeQuery。要創建或修改表的語句,使用的方法是 executeUpdate。 需要一個活躍的連接的來創建 Statement 對象的實例。在下面的例子中,我們使用我們的 Connection 對象 con 創建 Statement 對象 stmt: Statement stmt = con.createStatement(); 到此 stmt 已經存在了,但它還沒有把 SQL 語句傳遞到 DBMS。我們需要提供 SQL 語句作為參數提供給我們使用的 Statement 的方法。例如,在下面的代碼段里,我們使用上面例子中的 SQL 語句作為 executeUpdate 的參數: stmt.executeUpdate("CREATE TABLE COFFEES " + "(COF_NAME VARCHAR(32), SUP_ID INTEGER, PRICE FLOAT, " + "SALES INTEGER, TOTAL INTEGER)"); 因為我們已經把 SQL 語句賦給了 createTableCoffees 變數,我們可以如下方式書寫代碼: stmt.executeUpdate(createTableCoffees);
執行語句
我們使用 executeUpdate 方法是因為在 createTableCoffees 中的 SQL 語句是 DDL (數據定義語言)語句。創建表,改變表,刪除表都是 DDL 語句的例子,要用 executeUpdate 方法來執行。你也可以從它的名字里看出,方法 executeUpdate 也被用於執行更新表 SQL 語句。實際上,相對於創建表來說,executeUpdate 用於更新表的時間更多,因為表只需要創建一次,但經常被更新。 被使用最多的執行 SQL 語句的方法是 executeQuery。這個方法被用來執行 SELECT 語句,它幾乎是使用最多的 SQL 語句。馬上你將看到如何使用這個方法。
在表中輸入數據
我們已經顯示了如何通過指定列名、數據類型來創建表 COFFEES,但是這僅僅建立表的結構。表還沒有任何數據。我們將次輸入一行數據到表中,提供每列的信息,注意插入的數據顯示順序跟表創建時候是一樣的,既預設順序。 下列代碼插入一個行數據,COF_NAME 的值為 Colombian,SUP_ID 為 101,PRICE 為 7.99,SALES 0,TOTAL 0。就象創建 COFFEES 表一樣,我們創建一 Statement 對象,並執行 executeUpdate 方法。 因為 SQL 語句一行顯示不下,因此我們把它分為兩行,並用加號 (+) 相連。特別要注意的是,在 COFFEES 和 VALUES 之間要有空格。這個空格必須在引號之內並且要在 COFFEES 跟 VALUES 之間;沒有這個空格,SQL 語句將被錯誤地被讀作為 "INSERT INTO COFFEESVALUES ...",並且 DBMS 將尋找表 COFFEESVALUES。還要注意的是在 coffee name 上我們使用了單引號。 Statement stmt = con.createStatement(); stmt.executeUpdate( "INSERT INTO COFFEES " + "VALUES ('Colombian', 101, 7.99, 0, 0)"); 下面的代碼把第二行插入到表 COFFEES 中。我們可以在使用 Statement 對象而無須為每次執行創建一個新的。 stmt.executeUpdate("INSERT INTO COFFEES " + "VALUES ('French_Roast', 49, 8.99, 0, 0)"); 剩下行的數據如下: stmt.executeUpdate("INSERT INTO COFFEES " + "VALUES ('Espresso', 150, 9.99, 0, 0)"); stmt.executeUpdate("INSERT INTO COFFEES " + "VALUES ('Colombian_Decaf', 101, 8.99, 0, 0)"); stmt.executeUpdate("INSERT INTO COFFEES " + "VALUES ('French_Roast_Decaf', 49, 9.99, 0, 0)");
從表中取得數據
既然表 COFFEES 中已經有數據了,我們就可以寫一個 SELECT 語句來取得這些值。下面的 SQL 語句中星號 (*) 表示選擇所有的列。因為沒有用 WHERE 子句來限制所選的行,因此下面的 SQL 語句選擇的是整個表。 SELECT * FROM COFFEES 結果是整個表的數據,如下: COF_NAME SUP_ID PRICE SALES TOTAL --------------- ------ ----- ----- ----- Colombian 101 7.99 0 0 French_Roast 49 8.99 0 0 Espresso 150 9.99 0 0 Colombian_Decaf 101 8.99 0 0 French_Roast_Decaf 49 9.99 0 0 如果你直接在資料庫系統里輸入 SQL 查詢語句,你將在你的終端上看到如上的結果。當我們通過一個 Java 應用程序存取一個資料庫時,正如我們馬上要做的一樣,我們需要檢索結果以便我們能使用他們。你將在下一節看到如何實現。 這是 SELECT 語句的另一個例子,這將得到咖啡及其各自每磅單價的列表。 SELECT COF_NAME, PRICE FROM COFFEES 查詢的結果集將具有如下形式: COF_NAME PRICE -------- ---------- ----- Colombian 7.99 French_Roast 8.99 Espresso 9.99 Colombian_Decaf 8.99 French_Roast_Decaf 9.99 上面 SELECT 語句取得了所有咖啡的名字及價格。而下面的 SELECT 語句限制那些每磅價格低於 .00 的咖啡才被選擇。 SELECT COF_NAME, PRICE FROM COFFEES WHERE PRICE < 9.00 結果集將具有如下形式: COF_NAME PRICE -------- ------- ----- Colombian 7.99 French_Roast 8.99 Colombian Decaf 8.99
[編輯本段]建立JDBC連接
綜述
Connection 對象代表與資料庫的連接。連接過程包括所執行的 SQL 語句和在該連接上所返回的結果。一個應用程序可與單個資料庫有一個或多個連接,或者可與許多資料庫有連接。
打開連接
與資料庫建立連接的標准方法是調用DriverManager.getConnection方法。該方法接受含有某個URL的字元串。DriverManager類(即所謂的JDBC管理層)將嘗試找到可與那個URL所代表的資料庫進行連接的驅動程序。DriverManager類存有已注冊的Driver類的清單。當調用方法getConnection時,它將檢查清單中的每個驅動程序,直到找到可與URL中指定的資料庫進行連接的驅動程序為止。Driver的方法connect使用這個URL來建立實際的連接。 用戶可繞過JDBC管理層直接調用Driver方法。這在以下特殊情況下將很有用:當兩個驅動器可同時連接到資料庫中,而用戶需要明確地選用其中特定的驅動器。但一般情況下,讓DriverManager類處理打開連接這種事將更為簡單。 下述代碼顯示如何打開一個與位於URL"jdbc:odbc:wombat"的資料庫的連接。所用的用戶標識符為"freely",口令為"ec": String url = "jdbc:odbc:wombat"; Connection con = DriverManager.getConnection(url, "freely", "ec");
一般用法的URL
由於URL常引起混淆,我們將先對一般URL作簡單說明,然後再討論JDBCURL。URL(統一資源定位符)提供在Internet上定位資源所需的信息。可將它想像為一個地址。URL的第一部份指定了訪問信息所用的協議,後面總是跟著冒號。常用的協議有"ftp"(代表"文件傳輸協議")和"http"(代表"超文本傳輸協議")。如果協議是"file",表示資源是在某個本地文件系統上而非在Internet上(下例用於表示我們所描述的部分;它並非URL的組成部分)。 URL的其餘部份(冒號後面的)給出了數據資源所處位置的有關信息。如果協議是file,則URL的其餘部份是文件的路徑。對於ftp和http協議,URL的其餘部份標識了主機並可選地給出某個更詳盡的地址路徑。例如,以下是JavaSoft主頁的URL。該URL只標識了主機,從該主頁開始瀏覽,就可以進到許多其它的網頁中,其中之一就是JDBC主頁。
JDBC URL
JDBC URL提供了一種標識資料庫的方法,可以使相應的驅動程序能識別該資料庫並與之建立連接。實際上,驅動程序編程員將決定用什麼JDBC URL來標識特定的驅動程序。用戶不必關心如何來形成JDBC URL;他們只須使用與所用的驅動程序一起提供的URL即可。JDBC的作用是提供某些約定,驅動程序編程員在構造他們的JDBC URL時應該遵循這些約定。 由於JDBC URL要與各種不同的驅動程序一起使用,因此這些約定應非常靈活。首先,它們應允許不同的驅動程序使用不同的方案來命名資料庫。例如,odbc子協議允許(但並不是要求)URL含有屬性值。 其次,JDBC URL應允許驅動程序編程員將一切所需的信息編入其中。這樣就可以讓要與給定資料庫對話的applet打開資料庫連接,而無須要求用戶去做任何系統管理工作。 最後,JDBC URL應允許某種程度的間接性。也就是說,JDBC URL可指向邏輯主機或資料庫名,而這種邏輯主機或資料庫名將由網路命名系統動態地轉換為實際的名稱。這可以使系統管理員不必將特定主機聲明為JDBC名稱的一部份。網路命名服務(例如DNS、NIS和DCE)有多種,而對於使用哪種命名服務並無限制。 JDBC URL的標准語法如下所示。它由三部分組成,各部分間用冒號分隔。 JDBC URL的三個部分可分解如下: (1)jdbc協議:JDBC URL中的協議總是jdbc。 (2)<子協議>:驅動程序名或資料庫連接機制(這種機制可由一個或多個驅動程序支持)的名稱。子協議名的典型示例是"odbc",該名稱是為用於指定ODBC風格的數據資源名稱的URL專門保留的。例如,為了通過JDBC-ODBC橋來訪問某個資料庫,可以用如下所示的URL:jdbc:odbc:book。本例中,子協議為"odbc",子名稱"book"是本地ODBC數據資源。如果要用網路命名服務(這樣JDBC URL中的資料庫名稱不必是實際名稱),則命名服務可以作為子協議。例如,可用如下所示的URL:jdbc:dcenaming:accounts。本例中,該URL指定了本地DCE命名服務應該將資料庫名稱"accounts"解析為更為具體的可用於連接真實資料庫的名稱。 (3)<子名稱>:種標識資料庫的方法。子名稱可以依不同的子協議而變化。它還可以有子名稱的子名稱(含有驅動程序編程員所選的任何內部語法)。使用子名稱的目的是為定位資料庫提供足夠的信息。前例中,因為ODBC將提供其餘部份的信息,因此用"book"就已足夠。然而,位於遠程伺服器上的資料庫需要更多的信息。例如,如果資料庫是通過Internet來訪問的,則在JDBC URL中應將網路地址作為子名稱的一部份包括進去,且必須遵循如下所示的標准URL命名約定://主機名:埠/子協議。 假設"dbnet"是個用於將某個主機連接到Internet上的協議,則JDBC URL應為:jdbc:dbnet://wombat:356/fred。

參考http://ke..com/view/25611.htm?fr=ala0_1

② oracle資料庫sql語句中TABLE()的用法

Table( 函數名稱() );

意思是, 把返回結果集合的函數返回的結果, 以表的形式, 進行返回。

下面是一個返回結果集的函數的例子:

--定義類型
(Aint,Bint,Cint);
/
;
/IS
--預期返回結果.
return_ResultMyTableResult:=MyTableResult();
BEGIN
--結果追加一行.
return_Result.EXTEND;
--設置結果內容.
return_Result(return_Result.COUNT):=MyTable(A=>1,B=>2,C=>3);
--結果追加一行.
return_Result.EXTEND;
--設置結果內容.
return_Result(return_Result.COUNT):=MyTable(A=>4,B=>5,C=>6);
--結果追加一行.
return_Result.EXTEND;
--設置結果內容.
return_Result(return_Result.COUNT):=MyTable(A=>7,B=>8,C=>9);

returnreturn_Result;
ENDgetTestTable;
/


SQL>SELECT
2A,B,C
3FROM
4table(getTestTable());

ABC
------------------------------
123
456
789

SQL>

上面的table( getTestTable() );

就是這樣的效果。

③ 用SQL語句怎樣建立表和表連接謝謝!

在一個sql語句中通過表與表之間的鍵來做關聯,通過關聯之後的表來檢索需要的數據。
比如:
1.相等連接 select * from tablea a,tableb b where a.user_id=b.ueser_id;
2.外連接 select * from table1 a,table2 b where a.province_code = b.uniform_code(+)
3.不等連接 select * from table1 t1,table2 t2 where t1.name<>t2.name;
4.自連接 select * from table1 a,table1 b where a.name=b.cust_name;

④ C# 自創的dataTable如何使用sql語句來操作

Sql語句和C#語句發揮作用的地方是完全不同的,Sql語句只能對資料庫進行操作(增刪改查),而C#是在伺服器端,或者winforms的客戶端處理業務邏輯的。編程時執行sql語句返回數據集然後填充進datatable中,但是對datatable是不能用sql語句操作的,只能使用C#的語句進行操作。你要取值通常需要循環查詢滿足條件的記錄。

⑤ sql語句調用access中的table

sql語句調用access中的table如下
CREATE TABLE 表名稱
(
列名稱1 數據類型,
列名稱2 數據類型,
列名稱3 數據類型,
...
)。

⑥ sql語句中創建table的問題~

定義表約束。
CONSTRAINT 約束定義的開始
UPKCL_pubind 約束名
PRIMARY KEY
是通過唯一索引對給定的一列或多列強制實體完整性的約束。對於每個表只能創建一個 PRIMARY KEY 約束。
CLUSTERED | NONCLUSTERED
是表示為 PRIMARY KEY 或 UNIQUE 約束創建聚集或非聚集索引的關鍵字。PRIMARY KEY 約束默認為 CLUSTERED,UNIQUE 約束默認為 NONCLUSTERED。
在 CREATE TABLE 語句中只能為一個約束指定 CLUSTERED。如果在為 UNIQUE 約束指定 CLUSTERED 的同時又指定了 PRIMARY KEY 約束,則 PRIMARY KEY 將默認為 NONCLUSTERED。

CHECK 約束
意思:
創建一個名為publishers表欄位名為pub_id長度為4的字元型。
表的約束名為 UPKCL_pubind的聚集索引的關鍵字約束。
約束內容:pub_id欄位值是在('1389', '0736', '0877', '1622', '1756')內或'9900'到『9999』之間的值。

⑦ SQL語句創建表

CREATE TABLE 語句用於創建資料庫中的表。

具體用法為:

CREATE TABLE 表名稱

(

列名稱1 數據類型,

列名稱2 數據類型,

列名稱3 數據類型,

....

)

(7)tableapi和sql語句擴展閱讀

創建表數據類型:

integer(size) int(size) smallint(size) tinyint(size):僅容納整數。

decimal(size,d) numeric(size,d):容納帶有小數的數字。

char(size):容納固定長度的字元串

varchar(size):容納可變長度的字元串

date(yyyymmdd):容納日期。

參考資料:網路-SQL CREATE TABLE

⑧ SQL語句有哪幾種類型,各類型的主要作用是什麼

1、數據操縱語言(DML):用來操縱資料庫中數據的命令。包括:select、insert、update、delete。

2、數據定義語言(DDL):用來建立資料庫、資料庫對象和定義列的命令。包括:create、alter、drop。

3、數據控制語言(DCL):用來控制資料庫組件。

(8)tableapi和sql語句擴展閱讀:

SQL Server的特點如下:

1、具有真正的客戶機和伺服器體系結構。

2、圖形化用戶界面,使系統管理和資料庫管理更加直觀。

3、豐富的編程介面工具,為用戶進行程序設計提供了更大的選擇餘地。

4、其完全集成,利用了NT的許多功能,如發送和接受消息等。

⑨ SQL資料庫語句大全

經典SQL語句大全
下列語句部分是Mssql語句,不可以在access中使用。
SQL分類:
DDL—數據定義語言(CREATE,ALTER,DROP,DECLARE)
DML—數據操縱語言(SELECT,DELETE,UPDATE,INSERT)
DCL—數據控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,簡要介紹基礎語句:
1、說明:創建資料庫
CREATE DATABASE database-name
2、說明:刪除資料庫
drop database dbname
3、說明:備份sql server
--- 創建 備份數據的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據已有的表創建新表:
A:create table tab_new like tab_old (使用舊表創建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、說明:
刪除新表:drop table tabname
6、說明:
增加一個列:Alter table tabname add column col type
註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:
添加主鍵:Alter table tabname add primary key(col)
說明:
刪除主鍵:Alter table tabname drop primary key(col)
8、說明:
創建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
註:索引是不可更改的,想更改必須刪除重新建。
9、說明:
創建視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、說明:幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into table1(field1,field2) values(value1,value2)
刪除:delete from table1 where 范圍
更新:update table1 set field1=value1 where 范圍
查找:select * from table1 where field1 like 』%value1%』 ---like的語法很精妙,查資料!
排序:select * from table1 order by field1,field2 [desc]
總數:select count * as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重復行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重復行。
註:使用運算詞的幾個查詢結果行必須是一致的。
12、說明:使用外連接
A、left outer join:
左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
其次,大家來看一些不錯的sql語句
1、說明:復製表(只復制結構,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;
3、說明:跨資料庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in 『具體資料庫』 where 條件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、說明:子查詢(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、說明:顯示文章、提交人和最後回復時間
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、說明:外連接查詢(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、說明:在線視圖查詢(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 數值1 and 數值2
9、說明:in 的使用方法
select * from table1 where a [not] in (『值1』,』值2』,』值4』,』值6』)
10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、說明:四表聯查問題:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、說明:日程安排提前五分鍾提醒
SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5
13、說明:一條sql 語句搞定資料庫分頁
select top 10 b.* from (select top 20 主鍵欄位,排序欄位 from 表名 order by 排序欄位 desc) a,表名 b where b.主鍵欄位 = a.主鍵欄位 order by a.排序欄位
14、說明:前10條記錄
select top 10 * form table1 where 范圍
15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行並消除所有重復行而派生出一個結果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、說明:隨機取出10條數據
select top 10 * from tablename order by newid()
18、說明:隨機選擇記錄
select newid()
19、說明:刪除重復記錄
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、說明:列出資料庫里所有的表名
select name from sysobjects where type='U'
21、說明:列出表裡的所有的
select name from syscolumns where id=object_id('TableName')
22、說明:列示type、vender、pcs欄位,以type欄位排列,case可以方便地實現多重選擇,類似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
顯示結果:
type vender pcs
電腦 A 1
電腦 A 1
光碟 B 2
光碟 A 2
手機 B 3
手機 C 3
23、說明:初始化表table1
TRUNCATE TABLE table1
24、說明:選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc
隨機選擇資料庫記錄的方法(使用Randomize函數,通過SQL語句實現)
存儲在資料庫中的數據來說,隨機數特性能給出上面的效果,但它們可能太慢了些。你不能要求ASP「找個隨機數」然後列印出來。實際上常見的解決方案是建立如下所示的循環:
Randomize
RNumber = Int(Rnd*499) +1

While Not objRec.EOF
If objRec("ID") = RNumber THEN
... 這里是執行腳本 ...
end if
objRec.MoveNext
Wend
這很容易理解。首先,你取出1到500范圍之內的一個隨機數(假設500就是資料庫內記錄的總數)。然後,你遍歷每一記錄來測試ID 的值、檢查其是否匹配RNumber。滿足條件的話就執行由THEN 關鍵字開始的那一塊代碼。假如你的RNumber 等於495,那麼要循環一遍資料庫花的時間可就長了。雖然500這個數字看起來大了些,但相比更為穩固的企業解決方案這還是個小型資料庫了,後者通常在一個資料庫內就包含了成千上萬條記錄。這時候不就死定了?
採用SQL,你就可以很快地找出准確的記錄並且打開一個只包含該記錄的recordset,如下所示:
Randomize
RNumber = Int(Rnd*499) + 1

SQL = "SELECT * FROM Customers WHERE ID = " & RNumber

set objRec = ObjConn.Execute(SQL)
Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
不必寫出RNumber 和ID,你只需要檢查匹配情況即可。只要你對以上代碼的工作滿意,你自可按需操作「隨機」記錄。Recordset沒有包含其他內容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時間。
再談隨機數
現在你下定決心要榨乾Random 函數的最後一滴油,那麼你可能會一次取出多條隨機記錄或者想採用一定隨機范圍內的記錄。把上面的標准Random 示例擴展一下就可以用SQL應對上面兩種情況了。
為了取出幾條隨機選擇的記錄並存放在同一recordset內,你可以存儲三個隨機數,然後查詢資料庫獲得匹配這些數字的記錄:
SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
假如你想選出10條記錄(也許是每次頁面裝載時的10條鏈接的列表),你可以用BETWEEN 或者數學等式選出第一條記錄和適當數量的遞增記錄。這一操作可以通過好幾種方式來完成,但是 SELECT 語句只顯示一種可能(這里的ID 是自動生成的號碼):
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"
注意:以上代碼的執行目的不是檢查資料庫內是否有9條並發記錄。
隨機讀取若干條記錄,測試過
Access語法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
Sql server:select top n * from 表名 order by newid()
mysql select * From 表名 Order By rand() Limit n
Access左連接語法(最近開發要用左連接,Access幫助什麼都沒有,網上沒有Access的SQL說明,只有自己測試, 現在記下以備後查)
語法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
使用SQL語句 用...代替過長的字元串顯示
語法:
SQL資料庫:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
Access資料庫:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
Conn.Execute說明
Execute方法
該方法用於執行SQL語句。根據SQL語句執行後是否返回記錄集,該方法的使用格式分為以下兩種:
1.執行SQL查詢語句時,將返回查詢得到的記錄集。用法為:
Set 對象變數名=連接對象.Execute("SQL 查詢語言")
Execute方法調用後,會自動創建記錄集對象,並將查詢結果存儲在該記錄對象中,通過Set方法,將記錄集賦給指定的對象保存,以後對象變數就代表了該記錄集對象。
2.執行SQL的操作性語言時,沒有記錄集的返回。此時用法為:
連接對象.Execute "SQL 操作性語句" [, RecordAffected][, Option]
·RecordAffected 為可選項,此出可放置一個變數,SQL語句執行後,所生效的記錄數會自動保存到該變數中。通過訪問該變數,就可知道SQL語句隊多少條記錄進行了操作。
·Option 可選項,該參數的取值通常為adCMDText,它用於告訴ADO,應該將Execute方法之後的第一個字元解釋為命令文本。通過指定該參數,可使執行更高效。
·BeginTrans、RollbackTrans、CommitTrans方法
這三個方法是連接對象提供的用於事務處理的方法。BeginTrans用於開始一個事物;RollbackTrans用於回滾事務;CommitTrans用於提交所有的事務處理結果,即確認事務的處理。
事務處理可以將一組操作視為一個整體,只有全部語句都成功執行後,事務處理才算成功;若其中有一個語句執行失敗,則整個處理就算失敗,並恢復到處里前的狀態。
BeginTrans和CommitTrans用於標記事務的開始和結束,在這兩個之間的語句,就是作為事務處理的語句。判斷事務處理是否成功,可通過連接對象的Error集合來實現,若Error集合的成員個數不為0,則說明有錯誤發生,事務處理失敗。Error集合中的每一個Error對象,代表一個錯誤信息。
SQL語句大全精要
2006/10/26 13:46
DELETE語句
DELETE語句:用於創建一個刪除查詢,可從列在 FROM 子句之中的一個或多個表中刪除記錄,且該子句滿足 WHERE 子句中的條件,可以使用DELETE刪除多個記錄。
語法:DELETE [table.*] FROM table WHERE criteria
語法:DELETE * FROM table WHERE criteria='查詢的字'
說明:table參數用於指定從其中刪除記錄的表的名稱。
criteria參數為一個表達式,用於指定哪些記錄應該被刪除的表達式。
可以使用 Execute 方法與一個 DROP 語句從資料庫中放棄整個表。不過,若用這種方法刪除表,將會失去表的結構。不同的是當使用 DELETE,只有數據會被刪除;表的結構以及表的所有屬性仍然保留,例如欄位屬性及索引。

UPDATE
有關UPDATE,急!!!!!!!!!!!
在ORACLE資料庫中
表 A ( ID ,FIRSTNAME,LASTNAME )
表 B( ID,LASTNAME)
表 A 中原來ID,FIRSTNAME兩個欄位的數據是完整的
表 B中原來ID,LASTNAME兩個欄位的數據是完整的
現在要把表 B中的LASTNAME欄位的相應的數據填入到A表中LASTNAME相應的位置。兩個表中的ID欄位是相互關聯的。
先謝謝了!!!!
update a set a.lastname=(select b.lastname from b where a.id=b.id)

掌握SQL四條最基本的數據操作語句:Insert,Select,Update和Delete。
練掌握SQL是資料庫用戶的寶貴財 富。在本文中,我們將引導你掌握四條最基本的數據操作語句—SQL的核心功能—來依次介紹比較操作符、選擇斷言以及三值邏輯。當你完成這些學習後,顯然你已經開始算是精通SQL了。
在我們開始之前,先使用CREATE TABLE語句來創建一個表(如圖1所示)。DDL語句對資料庫對象如表、列和視進行定義。它們並不對表中的行進行處理,這是因為DDL語句並不處理資料庫中實際的數據。這些工作由另一類SQL語句—數據操作語言(DML)語句進行處理。
SQL中有四種基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由於這是大多數SQL用戶經常用到的,我們有必要在此對它們進行一一說明。在圖1中我們給出了一個名為EMPLOYEES的表。其中的每一行對應一個特定的雇員記錄。請熟悉這張表,我們在後面的例子中將要用到它。

⑩ 如何獲取流程API對應生成的SQL語句

如何獲取流程API對應生成的SQL語句??
create table ( id int identity(1, 1) not null primary key, other_column varchar(50))-- 對表設置主鍵的同時,資料庫會自動的創建一個以主鍵