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

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

JDBC 入門(三) - 設置表

2019-11-18 21:19:17
字體:
來源:轉載
供稿:網友
作者:axeon
創建表
  首先,我們在我們的示例數據庫創建其中一張表 COFFEES,包含在咖啡店所賣咖啡的必要的信息,包括咖啡名字,他們的價格,本星期賣了多少磅及迄今為止賣的數目。關于 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

  存儲咖啡名的列是 COF_NAME,它的 SQL 數據類型是 VARCHAR,最大的長度為 32 個字符。因為我們所賣的每種類型咖啡都使用不同的名字,名字可用于作為唯一識別咖啡的標識,因此可用于作主鍵。第二個列叫 SUP_ID,用于保存咖啡供應商標識;其 SQL 數據類型為 INTEGER。第 3 列叫 PRICE,因為它需要保存帶小數的十進制數,因此它的 SQL 類型為 FLOAT。(注意,通常錢的 SQL 類型為 DECIMAL 或 NUMERIC,但在不同 DBMSs 間存在差異,為了避免于老版本的 JDBC 的不兼容性在本教程我們采用更標準的 FLOAT 類型)SALES 列的 SQL 類型為 INTEGER,其值為本星期所賣咖啡的磅數。最后一列,TOTAL 的 SQL 類型為 INTEGER,保存了迄今為止所賣咖啡的總磅數。

  數據庫里的第二個表 SUPPLIERS,保存了每個供應商的信息:

SUP_ID SUP_NAME STREET CITY STATE Zip
101 Acme, Inc. 99 Market Street Groundsville CA 95199
49 Superior Coffee 1 Party Place Mendocino CA 95460
150 The High Ground 100 Coffee Lane Meadows CA 93966

  COFFEES 跟 SUPPLIERS 都包含列 SUP_ID,它意味著可以用 SELECT 語句從這兩張表中取得有關信息。列 SUP_ID 是 SUPPLIERS 表的主鍵,用于唯一識別每個咖啡供應商。在 COFFEES 表中,SUP_ID 列被稱外鍵。注意每個 SUP_ID 值在 SUPPLIERS 表里只出現一次;這對主鍵是必須的。在 COFFEES 表里,它作為外鍵,顯然它可以有重復的 SUP_ID 值,因為同一供應商可以提供很多種的咖啡。在本節的最后,你將看見如何在 SELECT 語句中使用主鍵及外鍵的一個例子。

  下面的 SQL 語句用于創建 COFFEES 表。列由列名跟空格跟 SQL 類型組成。列(包括列名及其 SQL 類型)跟下一個之間用逗號分隔。VARCHAR 類型創建定義了最大長度, 因此它需要有一個參數來表示最大長度。參數必須在類型后面的括號內。SQL 語句如下,列 COF_NAME 的長度 被限定為不得超過 32 個字符:

CREATE TABLE COFFEES
(COF_NAME VARCHAR(32),
SUP_ID INTEGER,
PRICE FLOAT,
SALES INTEGER,
TOTAL INTEGER)

  這些代碼不帶 DBMS 語句結束符, 因為每個 DBMS 都可能不同。例如, Oracle 使用一個分號 (;) 作為語句的結束,而 Sybase 使用 go。你所使用的驅動程序會自動提供合適的語句結束符,因此你無須把它包括在你的 JDBC 代碼中。

  另外,我們應該指出的的是 SQL 語句的格式。在 CREATE TABLE 語句中,關鍵字采用大寫字符,并且每個項目都另起一行。SQL 并沒有此要求;僅僅是為了更容易閱讀。SQL 標準是不區分關鍵詞的大小寫的, 因此,如下例中的 SELECT 語句可以有多種寫法。因此下面兩個不同寫法的語句對 SQL 來說是一樣的。

SELECT First_Name, Last_Name
FROM Employees
WHERE Last_Name LIKE "Washington"

select First_Name, Last_Name from Employees where
Last_Name like "Washington"

  然而,引號里的內容是區分大小寫的:在名字"Washington" 里 "W" 必須被大寫,并且余下的字符必須是小寫的。

  對于標識,不同的 DBMS 有不同的要求,例如, 某些 DBMSs 要求那些列名及表名必須跟創建時的一樣,有些則沒有此要求。為安全起見,我們全部使用大寫標識如 COFFEES、SUPPLIERS,因為我們是那樣定義他們的。

  到止我們寫了創建 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 的基礎。

創建 JDBC Statements 對象
  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 語句限制那些每磅價格低于 $9.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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久亚洲私人国产精品va| 亚洲视频网站在线观看| 久久精品91久久久久久再现| 久久免费视频网| 日韩综合中文字幕| 亚洲天堂日韩电影| 美女黄色丝袜一区| 情事1991在线| 国产精品人人做人人爽| 国产一区二区三区网站| zzijzzij亚洲日本成熟少妇| 精品自在线视频| 日韩高清电影免费观看完整版| 中文字幕在线观看亚洲| 亚洲精品动漫久久久久| 欧美人成在线视频| 欧美性猛交xxxx免费看漫画| 97国产在线视频| 欧美日韩999| 法国裸体一区二区| 日韩精品免费在线| 久久影视电视剧免费网站清宫辞电视| 黑人精品xxx一区| 中文字幕亚洲综合久久筱田步美| 国产aⅴ夜夜欢一区二区三区| 欧美理论电影网| 欧美成人精品不卡视频在线观看| 国内外成人免费激情在线视频网站| 日韩在线视频观看| 久久久精品2019中文字幕神马| 九九九热精品免费视频观看网站| 亚洲自拍小视频免费观看| 91理论片午午论夜理片久久| 中文国产亚洲喷潮| 色偷偷888欧美精品久久久| 中文字幕日本欧美| 国产精品91久久| 欧美日韩亚洲91| 国产精品国产亚洲伊人久久| 成人黄色在线播放| 日韩欧美主播在线| 日韩最新av在线| 在线观看精品自拍私拍| 亚洲影院高清在线| 久久久久久97| 国产午夜精品全部视频播放| 亚洲国产天堂久久国产91| 久热国产精品视频| 欧美精品在线观看91| 亚洲已满18点击进入在线看片| 青青草99啪国产免费| 国产精品欧美一区二区| 亚洲一区久久久| 欧美日韩亚洲天堂| 国产精品影院在线观看| 国产精品久久77777| 久久香蕉国产线看观看av| 欧美—级a级欧美特级ar全黄| 亚洲精品电影网| 国产精品久久久久久久7电影| 国产精品欧美一区二区三区奶水| 日韩电影中文 亚洲精品乱码| 国产亚洲成精品久久| 亚洲男人天堂2023| 欧美一级视频一区二区| 成人av色在线观看| 中文字幕精品www乱入免费视频| 成人欧美一区二区三区在线| 欧美日韩中文字幕在线| 久久免费视频这里只有精品| 日韩在线免费观看视频| 亚洲欧洲自拍偷拍| 国产精品久久久久久av下载红粉| 欧美亚洲国产另类| 在线成人免费网站| 亚洲精品视频在线观看视频| 亚洲欧美制服综合另类| 中日韩美女免费视频网站在线观看| 亚洲大胆人体av| 国产美女久久久| 亚洲精品国产福利| 欧美乱妇40p| 国产欧美一区二区三区在线看| 国产精品91在线观看| 国产视频观看一区| 久久成人精品一区二区三区| 日本不卡免费高清视频| 韩国一区二区电影| 亚洲精品视频二区| 欧美洲成人男女午夜视频| 国语自产精品视频在线看| 欧美大胆a视频| 成人妇女淫片aaaa视频| 亚洲va码欧洲m码| 亚洲在线第一页| 久久久噜噜噜久久中文字免| 日韩亚洲成人av在线| 日本精品视频在线| 日韩亚洲欧美中文高清在线| 欧美午夜性色大片在线观看| 亚洲国产精品va在线| 国产精品一区二区久久精品| 日韩欧美在线视频| 97视频在线免费观看| 日韩中文字幕在线看| 亚洲国产日韩欧美综合久久| 亚洲天堂久久av| 国产视频亚洲精品| 日韩视频在线免费观看| 欧美日韩亚洲成人| 欧美日韩福利电影| 丝袜亚洲欧美日韩综合| 精品久久久久久久久久久久久| 欧美激情国产高清| 久久天天躁夜夜躁狠狠躁2022| 日本久久91av| 久久精品国产亚洲精品| 日韩在线视频二区| 亚洲第一精品夜夜躁人人爽| 欧美午夜激情视频| 久久免费观看视频| 成人97在线观看视频| 亚洲国产成人爱av在线播放| 国产一区二区三区在线播放免费观看| 亚洲精品国产精品国自产观看浪潮| 国产精品av免费在线观看| 欧美日韩一区免费| 欧美在线观看www| 欧美xxxx18国产| 影音先锋欧美在线资源| 国产精品91久久| 黄色一区二区三区| 成人免费在线视频网站| 欧美色视频日本高清在线观看| 97婷婷涩涩精品一区| 久久久久久美女| 国产女人18毛片水18精品| 91社影院在线观看| 国产偷国产偷亚洲清高网站| 国产香蕉一区二区三区在线视频| 亚洲级视频在线观看免费1级| 亚洲视频在线免费观看| www.久久久久久.com| 亚洲国产精品久久精品怡红院| 日本久久亚洲电影| 国产精品激情av电影在线观看| 91免费精品视频| 色噜噜亚洲精品中文字幕| 国内精品免费午夜毛片| 欧美日韩免费一区| 68精品国产免费久久久久久婷婷| 奇米一区二区三区四区久久| 国产99久久精品一区二区 夜夜躁日日躁| 欧美日韩午夜视频在线观看| 色av吧综合网| 欧美性视频精品| 国产一区玩具在线观看| 欧美日韩国产一中文字不卡| 亚洲黄页网在线观看| 国内精品视频久久| 亚洲成年人影院在线| 欧美一区二区三区免费观看| 精品国产精品三级精品av网址| 在线观看视频亚洲|