1.4.4 創(chuàng)建數(shù)據(jù)庫(kù)及數(shù)據(jù)表
本節(jié)介紹如何在SQL Server 2005的企業(yè)管理器中創(chuàng)建數(shù)據(jù)庫(kù)及數(shù)據(jù)表,在創(chuàng)建數(shù)據(jù)表時(shí)以創(chuàng)建tb_info數(shù)據(jù)表為例進(jìn)行介紹。
1.創(chuàng)建數(shù)據(jù)庫(kù)
(1)確認(rèn)是否安裝了SQL Server 2005數(shù)據(jù)庫(kù),若沒有則需進(jìn)行安裝。
(2)安裝后,選擇“開始”/“程序”/Microsoft SQL Server 2005/SQL Server Management Studio命令,啟動(dòng)SQL Server企業(yè)管理器,并展開控制臺(tái)根目錄,如圖1.25所示。
(3)右擊“數(shù)據(jù)庫(kù)”節(jié)點(diǎn),選擇“新建數(shù)據(jù)庫(kù)”命令,將彈出“數(shù)據(jù)庫(kù)屬性”對(duì)話框,在“名稱”文本框中輸入數(shù)據(jù)庫(kù)名稱“db_CityInfo”,其他選項(xiàng)保留默認(rèn)設(shè)置。
(4)單擊“確定”按鈕完成數(shù)據(jù)庫(kù)db_CityInfo的創(chuàng)建。
2.創(chuàng)建數(shù)據(jù)表
數(shù)據(jù)庫(kù)創(chuàng)建成功后,展開如圖1.25所示的“數(shù)據(jù)庫(kù)”選項(xiàng),則創(chuàng)建的數(shù)據(jù)庫(kù)會(huì)在這里顯示,如 圖1.26所示。下面以創(chuàng)建tb_info數(shù)據(jù)表為例介紹創(chuàng)建數(shù)據(jù)表的步驟。
(1)展開db_CityInfo數(shù)據(jù)庫(kù),右擊“表”節(jié)點(diǎn),在彈出的快捷菜單中選擇“新建表”命令,將彈出用來(lái)創(chuàng)建表的對(duì)話框。
(2)根據(jù)表1.6所示的數(shù)據(jù)表tb_info的結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)表,如圖1.27所示。
其中id字段被設(shè)置為主鍵,其創(chuàng)建方法如下:在id行中單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“設(shè)為主鍵”命令,即可完成主鍵的創(chuàng)建。若“設(shè)為主鍵”命令已被選中,則再次單擊可取消主鍵的設(shè)置。
(3)表結(jié)構(gòu)設(shè)置完成后,單擊左上角的“保存”按鈕,在彈出的對(duì)話框中輸入數(shù)據(jù)表的名稱“tb_info”,然后單擊“確定”按鈕保存數(shù)據(jù)表。
(4)數(shù)據(jù)表創(chuàng)建成功后,將在SQL Server企業(yè)管理器窗口的右側(cè)區(qū)域中顯示,如圖1.28所示。
(5)按照以上步驟創(chuàng)建其他數(shù)據(jù)表。
1.5 公共類設(shè)計(jì)
在開發(fā)程序時(shí),經(jīng)常會(huì)遇到在不同的方法中進(jìn)行相同處理的情況,例如數(shù)據(jù)庫(kù)連接和字符串處理等,為了避免重復(fù)編碼,可將這些處理封裝到單獨(dú)的類中,通常稱這些類為公共類或工具類。在開發(fā)本網(wǎng)站時(shí),用到數(shù)據(jù)庫(kù)連接及操作類、業(yè)務(wù)處理類、分頁(yè)類和字符串處理類4個(gè)公共類,下面分別介紹。
1.5.1 數(shù)據(jù)庫(kù)連接及操作類
DB類主要是對(duì)數(shù)據(jù)庫(kù)的操作,如連接、關(guān)閉數(shù)據(jù)庫(kù)及執(zhí)行SQL語(yǔ)句操作數(shù)據(jù)庫(kù)。每一種操作均對(duì)應(yīng)一個(gè)方法,如getCon()方法用來(lái)獲取數(shù)據(jù)庫(kù)連接,closed()方法用來(lái)關(guān)閉數(shù)據(jù)庫(kù)連接,而對(duì)數(shù)據(jù)庫(kù)的增、刪、改、查等操作都在doPstm()方法中實(shí)現(xiàn),該方法是通過(guò)PreparedStatement對(duì)象來(lái)執(zhí)行SQL語(yǔ)句的。下面介紹DB類的創(chuàng)建過(guò)程。
(1)導(dǎo)入所需的類包。代碼如下:
例程01 代碼位置:光盤\TM\01\src\com\yxq\dao\DB.java
import java.sql.Connection; //表示連接到某個(gè)數(shù)據(jù)庫(kù)的連接
import java.sql.DriverManager; //用來(lái)獲取數(shù)據(jù)庫(kù)連接
import java.sql.PreparedStatement; //用來(lái)執(zhí)行SQL語(yǔ)句
import java.sql.ResultSet; //封裝查詢結(jié)果集
import java.sql.SQLException; //異常處理類
(2)聲明類的屬性并賦值。代碼如下:
例程02 代碼位置:光盤\TM\01\src\com\yxq\dao\DB.java
private Connection con; //聲明一個(gè)Connection對(duì)象
private PreparedStatement pstm; //聲明一個(gè)PreparedStatement對(duì)象
private String user="sa"; //登錄數(shù)據(jù)庫(kù)的默認(rèn)用戶名
private String password=""; //登錄數(shù)據(jù)庫(kù)的密碼
private String className="com.microsoft.jdbc.sqlserver.SQLServerDriver"; //數(shù)據(jù)庫(kù)驅(qū)動(dòng)類路徑
private String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_CityInfo"; //數(shù)據(jù)庫(kù)URL
(3)覆蓋默認(rèn)構(gòu)造方法,在該方法中實(shí)現(xiàn)數(shù)據(jù)庫(kù)驅(qū)動(dòng)的加載。這樣,當(dāng)通過(guò)new操作符實(shí)例化一個(gè)DB類的同時(shí),就會(huì)加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)。代碼如下:
例程03 代碼位置:光盤\TM\01\src\com\yxq\dao\DB.java
public DB(){ //DB類的構(gòu)造方法
try{ //必須使用try-catch語(yǔ)句捕獲加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)時(shí)可能發(fā)生的異常
Class.forName(className); //加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)
}catch(ClassNotFoundException e){ //捕獲ClassNotFoundException異常
System.out.println("加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)失??!");
e.printStackTrace(); //輸出異常信息
}
}
(4)創(chuàng)建獲取數(shù)據(jù)庫(kù)連接的方法getCon(),方法中使用DriverManager類的getConnection()靜態(tài)方法獲取一個(gè)Connection類實(shí)例。代碼如下:
例程04 代碼位置:光盤\TM\01\src\com\yxq\dao\DB.java
/*創(chuàng)建數(shù)據(jù)庫(kù)連接*/
public Connection getCon(){
try {
con=DriverManager.getConnection(url,user,password); //建立連接,連接到由屬性u(píng)rl指定的數(shù)據(jù)庫(kù)URL,
//并指定登錄數(shù)據(jù)庫(kù)的用戶名和密碼
} catch (SQLException e) {
System.out.println("創(chuàng)建數(shù)據(jù)庫(kù)連接失敗!");
con=null;
e.printStackTrace();
}
return con;
}
(5)創(chuàng)建對(duì)數(shù)據(jù)庫(kù)進(jìn)行增、刪、改、查等操作的doPstm()方法,方法中使用了PreparedStatement類對(duì)象來(lái)執(zhí)行SQL語(yǔ)句。之所以可以將這些操作在一個(gè)方法中實(shí)現(xiàn),是因?yàn)閐oPstm()方法中設(shè)置了兩個(gè)參數(shù)——sql和params。sql為String型變量,存儲(chǔ)了要執(zhí)行的SQL語(yǔ)句;params為Object類型數(shù)組,存儲(chǔ)了為sql表示的SQL語(yǔ)句中“?”占位符賦值的數(shù)據(jù)。為SQL語(yǔ)句中的“?”占位符賦值,可通過(guò)PreparedStatement類對(duì)象的setXXX()方法實(shí)現(xiàn),然后調(diào)用execute()方法執(zhí)行SQL語(yǔ)句。
例如,為select * from table where name=?語(yǔ)句中的“?”賦值,假若name字段類型為char或varchar,則應(yīng)使用如下代碼:
pstm.setString(1,"yxq")