首先,關於數據庫的安裝方法在本文中就不再累贅,詳情請見我的上一篇博客。
http://cq520.iteye.com/admin/blogs/1982097
不過需要注意的是,由於裝有Windows操作系統下的電腦都默認有SQL Server,所以大家可以打開自己 的電腦看一下自己的電腦裡面是哪個SQL Server 版本(在開始菜單中找到Microsoft SQL Server文件夾 ,後面的版本號就是本機的SQL Server 版本)。
不過系統自帶的SQL Server可能並沒有管理工具(SQL Server Management Studio,如本人的電腦) ,就可以在百度下載,要記得添加上自己的版本號哦,如SQL Server Management Studio 2005.
下面進入主題,如何使用JDBC連接SQL Server數據庫:(以2005版本為例)
1. 關閉防火牆。防火牆設置會導致你無法連接到本地的數據庫,至少這是出於安全的考慮。
2. 配置TCP端口:
a. 開始->所有程序->Microsoft SQL Server 2005->配置工具- >SQL Server配置管理器->SQL Server 2005 網絡配置->MSSQLSERVER協議
b. 啟用 “TCP/IP”(右鍵單擊選擇“啟動”)[http://www.colalife.com]
c. 雙擊 “TCP/IP”->“IP 地址”->“IPAll”->“TCP 端口 ”項添加默認的“1433”端口
3. 外圍應用配置:Microsoft SQL Server 2005->配置工具->SQL Server外圍應用配置器-> 服務和連接的外圍應用配置器->
①選SQLEXPRESS->Database Engine->遠程連接->本地 連接和遠程連接->同時使用TCP/IP和named pipes
②選SQL Server Browser->服務->啟動類 型改為“自動”->應用->啟動->確定
4. 修改默認的登錄驗證模式(如果在安裝過程中是默認按“Windows 身份驗證模式”方式 安裝,所以sa登錄是被禁用的,即使將身份驗證模式更改為“SQL Server 和 Windows 身份驗證模 式”,sa登錄仍處於禁用狀態,所以需要啟用sa登錄帳戶):
①在SQL Server Management Studio 的對象資源管理器中,安全性->登錄名->右擊“sa”->屬性->
常規->將登錄名sa的密碼和確認密碼設為強密碼->狀態->登錄->啟用->確定
②在 SQL Server Management Studio 的對象資源管理器中,右擊服務器->屬性->安全性->服務器身 份驗證->選擇“SQL Server和Windows身份驗證模式”->確定->確定
5. 在SQL Server Management Studio中新建一個數據庫(例如“mytest”,如果測試程序 帶有數據庫文件也可不用新建而直接附加到當前SQL Server數據庫服務器);在SQL Server Management Studio 的對象資源管理器中右擊服務器->重新啟動->是
6. 運行下載的JDBC文件“sqljdbc_1.2.2828.100_chs.exe”,(已在附件中給大家配上), 解壓到“C:\Program Files”文件夾中;[http://www.colalife.com]
將Classpath設置為包含sqljdbc.jar文件(也可加到系統環境變量中),建議從解壓文件夾下找到 sqljdbc.jar,將其復制到自己常用的Jar文件夾裡,用的時候方便找到。
7. 在Eclipse3.2 / 3.3 或 MyEclipse6.0 / 6.5 中進行JDBC連接設置並測試
1、打開Eclipse3.2 / 3.3 或 MyEclipse6.0 / 6.5,新建Java Project”,項目名為Test
2、選擇 “Window”→“Preferences”→“Java”→“Inst alled JREs”,選定已安裝的 JRE,點擊“Edit...”→“Add External JARs”,找到sqljdbc.jar並添加—>OK
3、"Window"->"Open Perspective"->"MyEclipse Database Explorer"->(左側)"DB Browser"右鍵“New”->填寫鏈接屬性Driver name,URL為:jdbc:sqlserver:// localhost:1433;databaseName=mytest,User name:sa,Password:密碼。然後在Driver JARs 點Add JARs 添加sqljdbc.jar,點及Test
Driver測試,勾上Save Password保存密碼,點擊完成結束——即完成了在DB Browser中連 接數據庫配置。
到上面一步為止,我們的配置工作就已經基本完成了,接下來就是一個數據庫編程的具體實例。需要 注意的是,就像我上面所提到的,要進行數據庫編程,至少得有個數據庫吧(巧婦難為無米之炊),還要 會一些基本的數據庫操作,這些對於學過數據庫課程的你應該沒有問題,如果你沒學過數據庫課程,也沒 關系,你可以花時間看看數據庫的一些簡單操作,這些在相關課本上很容易找到。
廢話不多說,代碼如下:
Java代碼
package DBManager;
import java.sql.Connection;
import java.sql.DriverManager;
import INFO.Info;
/**
* 數據庫連接類
* @author Administrator
*
*/
public class DBConnection {
//加載並連接本地的SQLServer
String driveName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url="jdbc:sqlserver://localhost:1433;DatabaseName=cqTalk";
String userName="sa";
String pwd="xiaoyan710";
/**
* 創建時加載驅動
*/
public DBConnection(){
try{
Class.forName(driveName);
}catch(Exception e){
Info.error("驅動加載失敗");
}
}
public Connection getConnection(){
Connection con=null;
try{
con=DriverManager.getConnection(url,userName,pwd);
Info.log("數據庫連接成功");
}catch(Exception e){
e.printStackTrace();
}
return con;
}
}
Java代碼
package User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import DBManager.DBConnection;
import INFO.Info;
/**
* 對用戶數據的操作
* @author cq
*
*/
public class UserDao {
DBConnection dbCon=null;
Connection connection=null;
PreparedStatement state=null;//預編譯的sql語句對象
String sql=null;//sql語句
/**
* 創建用戶操作類時加載驅動
*/
public UserDao(){
dbCon=new DBConnection();
}
/**
* 添加新用戶的方法
* @param user
*/
public void add(User user){
connection=dbCon.getConnection();
sql="insert into userData values(?,?,?,?,?)";
try{
state=connection.prepareStatement(sql);
state.setString(1, user.getID());
state.setString(2, user.getPwd());
state.setString(3, user.getNickname());
state.setInt(4, user.getChecking());
state.setString(5, user.getAnswer());
state.executeUpdate();
Info.log("用戶添加成功");
state.close();
}catch(Exception e){
e.printStackTrace();
Info.error("用戶添加失敗");
}finally{
if(connection!=null){
try{
connection.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
/**
* 刪除一個用戶的方法,根據用戶的ID號
* @param ID
*/
public void delete(String ID){
connection=dbCon.getConnection();
sql="delete from userData where userID=?";
try{
state=connection.prepareStatement(sql);
state.setString(1, ID);
state.executeUpdate();
Info.log("用戶刪除成功");
state.close();
}catch(Exception e){
Info.error("用戶刪除失敗");
}finally{
if(connection!=null){
try{
connection.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
/**
* 更新用戶數據的方法
* @param user
*/
public void update(User user){
connection=dbCon.getConnection();
sql="update userData set pwd=?,nickname=?" +
",checking=?,answer=? where userID=?";
try{
//執行更新操作時,所填入的數據順序一定要與sql語句的數據順序相同
state=connection.prepareStatement(sql);
state.setString(1, user.getPwd());
state.setString(2, user.getNickname());
state.setInt(3, user.getChecking());
state.setString(4, user.getAnswer());
state.setString(5, user.getID());
state.executeUpdate();
Info.log("用戶更新成功");
state.close();
}catch(Exception e){
e.printStackTrace();
Info.error("數據更新失敗");
}finally{
if(connection!=null){
try{
connection.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
/**
* 根據用戶ID查找用戶的信息
* @param ID
*/
public User get(String ID){
User user=new User();
connection=dbCon.getConnection();
sql="select * from userData where userID=?";
try{
state=connection.prepareStatement(sql);
state.setString(1, ID);
ResultSet set=state.executeQuery();
while(set.next()){
user.setID(set.getString(1).trim());
user.setPwd(set.getString(2).trim());
user.setNickname(set.getString(3).trim());
user.setChecking(set.getInt(4));
user.setAnswer(set.getString(5));
}
state.close();
set.close();
}catch(Exception e){
Info.error("查找失敗");
}finally{
if(connection!=null){
try{
connection.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
return user;
}
}
查看本欄目
Java代碼
package User;
/**
* 用戶類
* @author cq
*
*/
public class User {
private String ID;//賬號
private String pwd;//密碼
private String nickname;//昵稱
private int checking;//密保驗證編號
private String answer;//答案
public User(){
}
public User(String ID,String pwd){
this.ID=ID;
this.pwd=pwd;
}
/**
* 獲取賬號
* @return
*/
public String getID() {
return ID;
}
/**
* 設置賬號
* @param iD
*/
public void setID(String iD) {
ID = iD;
}
/**
* 獲取密碼
* @return
*/
public String getPwd() {
return pwd;
}
/**
* 設置密碼
* @param pwd
*/
public void setPwd(String pwd) {
this.pwd = pwd;
}
/**
* 獲取昵稱
* @return
*/
public String getNickname() {
return nickname;
}
/**
* 設置昵稱
* @param nickname
*/
public void setNickname(String nickname) {
this.nickname = nickname;
}
/**
* 獲取驗證編號
* @return
*/
public int getChecking() {
return checking;
}
/**
* 設置驗證編號
* @param checking
*/
public void setChecking(int checking) {
this.checking = checking;
}
/**
* 獲取密保答案
* @return
*/
public String getAnswer() {
return answer;
}
/**
* 設置密保答案
* @param answer
*/
public void setAnswer(String answer) {
this.answer = answer;
}
}
這裡簡單的介紹了數據庫的增刪查改等功能(這熟悉的名詞是否也在哪裡聽過呢??O(∩_∩) O~),特別需要注意的是,我在更新數據方法中所標明的那一句注釋,很多人經常搞亂了順序而得不到正 確的結果。
此外,還有幾點:
一、一定要記得finally語句中所執行的內容,不管操作是否成功都一定要關閉連接,這一點非常重要 。
二、最好將異常消息打印出來,這在初期編程的時候能夠更加方便的幫你解決問題。
三、在使用完數據庫之後將’sa’用戶的密碼策略改為強制過期,(這一點是出於信息安 全的考慮),在每次使用前再取消密碼強制過期,並修改密碼,再執行jdbc操作,具體修改方法請見上面 第四條。
四、Sql Server2000和2005的連接代碼區別:(注意2000和2005的不同)
1. 連接 SqlServer2000
Class.forName ("com.microsoft.jdbc.sqlserver.SQLServerDriver");
URL = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tempdb";
2. 連接 SqlServer2005
Class.forName ("com.microsoft.sqlserver.jdbc.SQLServerDriver");
URL = "jdbc:sqlserver://localhost:1433;DatabaseName=tempdb";
五、可能出現的exception: com.microsoft.sqlserver.jdbc.AuthenticationJNI <clinit>
WARNING: Failed to load the sqljdbc_auth.dll
解決辦法:在sqljdbc_1.2.2828.100_chs.exe解壓後的文件夾中找到Microsoft SQL Server 2005 JDBC Driver\sqljdbc_1.2\chs\auth\x86下的sqljdbc_auth.dll拷貝到:C:WINDOWSsystem32 目錄下即可。
基本內容就到這裡了,如果你使用的是MySQL,那也沒關系,除了環境配置之外,只是驅動跟端口號需 要修改罷了,快用數據庫優化你的程序吧。