數據庫操作現在是項目開發的根本,學習Java首先應該學會怎么樣連接數據庫,用Java連接數據庫可不像用Delphi這類工具那樣設幾個屬性就OK,說簡單也簡單,說復雜,其實也挺復雜的,而且很麻煩,如果是初學,根本不能保證第一次就連接成功,下面以SQL Server 2000為例,說說Java連接數據庫的基本方法,也記錄一下心得。
1、下載SQL Server 2000 driver for JDBC
SQL Server 2000 Driver For JDBC Downloads
該驅動截止目前有四個版本,建議下載最新的SP3版。
該驅動安裝成功后,請將安裝目錄下的lib目錄下的三個.jar文件加到CLASSPATH中;如果你使用的是JBuilder或Eclipse,將這三個文件根據IDE的提示加到工程中也可。
2、升級你的SQL Server 2000,為其打上最新的補丁。
這一步可能不是必需的,因操作系統環境而定,在不打補丁的情況,有時可以正常連接,有時卻不能,所以建議還是安裝最新的SQL Server 2000補丁(SP4)和JDBC驅動(SP3)。
如果你的程序在運行時提示:Error establishing socket,一般情況下,打上SQL Server 2000的補丁就可解決。
3、驅動的加載方法
在建立連接之前,要先加載SQL Server 2000 JDBC的驅動,代碼形式如下:
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
在此注意,forName方法的參數字符串必須完全相同于以上內容,大小寫是區分的,其實這個串就是驅動類的完整名稱:包名+類名。
4、獲得一個連接
在操作數據庫之前,要先獲得與數據庫的一個連接,使用如下代碼格式:
DriverManager.getConnection(連接字符串, 登錄用戶名, 登錄密碼);
例:
DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=pubs", "sa", "");
在此處關鍵的是連接字符串的內容,localhost部分即服務器的名字,可以更改;1433部分為SQL Server使用的端口號,根據實際情況修改即可;DatabaseName即為要連接的數據庫的名字,在此注意DatabaseName之前的是分號,而不是冒號。
5、代碼實例
// 導入Java SQL包,連接數據庫必需;
import java.sql.*;
public class TestDB {
public static void main(String[] args) {
String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String dbURL = "jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=pubs";
String userName = "sa";
String userPwd = "";
Connection dbConn
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
System.out.println("Connection Successful!");
}
Catch (Exception e) {
e.printStackTrace();
}
}
}
6、可能出現的問題
如果以上的代碼運行后,輸出"Connection Successful!",那就代表一切正常,連接數據庫成功,你可以進行Statement、ResultSet的操作了;反之的話,一定是出現了相應的異常。
如果提示錯誤"Error establishing socket",請根據之前的說明安裝相應的SQL Server 2000補丁即可。
如果提示"ClassNotFoundException",那一定是 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 該段代碼拼寫有誤,或者是SQL Server 2000 Driver For JDBC Lib目錄下的三個.jar文件未加入到CLASSPATH中。
![]() 圖1. 抽象工廠模式的類圖定義 |
![]() 圖2. 抽象工廠模式的位圖 |
![]() 圖3. 抽象工廠模式應用于小花果園系統中。三種不同的背景顏色可以區分工廠類,蔬菜類(第一產品族),和水果類的類圖(第二產品族) |
package com.javapatterns.abstractfactory; public interface Gardener {} |
package com.javapatterns.abstractfactory; public class NorthenGardener implements Gardener { public VeggieIF createVeggie(String name) { return new NorthernVeggie(name); } public FruitIF createFruit(String name) { return new NorthernFruit(name); } } |
package com.javapatterns.abstractfactory; public class TropicalGardener implements Gardener { public VeggieIF createVeggie(String name) { return new TropicalVeggie(name); } public FruitIF createFruit(String name) { return new TopicalFruit(name); } } |
package com.javapatterns.abstractfactory; public interface VeggieIF {} |
package com.javapatterns.abstractfactory; public class NorthernVeggie implements VeggieIF { public NorthernVeggie(String name) { this.name = name; } public String getName(){ return name; } public void setName(String name){ this.name = name; } private String name; } |
package com.javapatterns.abstractfactory; public class TropicalVeggie implements VeggieIF { public TropicalVeggie(String name) { this.name = name;} public String getName(){ return name; } public void setName(String name){ this.name = name; } private String name; } |
![]() 圖4. 抽象工廠模式應用于微型計算機生產系統中。兩種不同的背景顏色可以區分兩類產品族,及其對應的實工廠類 |
![]() 圖5. 三種不同的背景顏色可以區分抽象工廠類,兩類產品族,及其對應的實工廠類。ComputerProducer 類圖中類名為斜體表明該類是抽象的,而getProducer()的下劃線表明該方法是靜態的 |
package com.javapatterns.abstractfactory.exercise1; public class ComputerProducer { public static ComputerProducer getProducer(String which) { if (which.equalsIgnoreCase("PC")) { return new PCProducer(); } else (which.equalsIgnoreCase("Mac")) { return new MacProducer(); } } } |
![]() 圖6. 三種不同的背景顏色可以區分抽象工廠類,兩類產品族,及其對應的實工廠類。ComputerProducer 類圖中類名為斜體表明該類是抽象的,而getProducer()的下劃線表明該方法是靜態的。MacProducer 和 PCProducer 的構造子是私有的,因此這兩個類必須自己將自己實例化。 |
package com.javapatterns.abstractfactory.exercise3; abstract public class ComputerProducer { public static ComputerProducer getProducer(String which) { if (which.equalsIgnoreCase("PC")) { return PCProducer.getInstance(); } else (which.equalsIgnoreCase("Mac")) { return MacProducer.getInstance(); } } } |
package com.javapatterns.abstractfactory.exercise3; public class MacProducer extends ComputerProducer { private MacProducer() { } public CPU createCPU() {} public RAM createRAM() {} private static final m_MacProducer = new MacProducer(); } |
package com.javapatterns.abstractfactory.exercise3; public class PCProducer extends ComputerProducer { private PCProducer() { } public CPU createCPU() {} public RAM createRAM() {} private static final m_PCProducer = new PCProducer(); } |