Java 實(shí)現(xiàn)連接sql server 2000
更新時(shí)間:2009年06月13日 20:00:45 作者:
JDBC技術(shù)事實(shí)上是一種能通過JAVA語言訪問任何結(jié)構(gòu)化數(shù)據(jù)庫的應(yīng)用程序接口(API)(Sun這樣說的,我也不知道是不是真的),而且現(xiàn)在的JDBC 3.0據(jù)Sun說也能訪問Execel等電子表格程序!
第一種:通過ODBC連接數(shù)據(jù)庫
JAVA語言的跨平臺(tái)的工作能力(Write Once ,Run Anywhere)、優(yōu)秀的圖像處理能力(我相信現(xiàn)在沒有那種語言可以超過JAVA在網(wǎng)絡(luò)上的圖形處理能力)、網(wǎng)絡(luò)通信功能、通過JDBC數(shù)據(jù)庫訪問技術(shù)等等,讓我們誰都不可否認(rèn)JAVA語言是SUN公司對(duì)于計(jì)算機(jī)界的一個(gè)巨大的貢獻(xiàn)。筆者可以描述這樣一個(gè)場(chǎng)景:有一天你上網(wǎng)完全可以不用IE 或者NETSCAPE,上網(wǎng)就像是玩游戲,你可以獲得游戲那么精美的圖像和互動(dòng)的感覺,如果你玩過UO,也許你就知道那種感覺了,但是JAVA做成的東西一定會(huì)超過UO的,因?yàn)椴粏螁问怯螒?,也不是單單是瀏覽器,如果你愿意(要你有錢,有時(shí)間,有優(yōu)秀的JAVA人才)你可以把所有的這一切用Java完全集成出來?。?!我不是夸大JAVA的功能,大家可以訪問一下http://www.simchina.net的那個(gè)社區(qū)程序,你就能找到一種感覺了:相信我沒有說什么假話 。好了,不說廢話了,現(xiàn)在我向你介紹JAVA的數(shù)據(jù)庫訪問技術(shù)----JDBC數(shù)據(jù)庫訪問技術(shù)(你可千萬不要搞成ODBC了?。?
JDBC技術(shù)事實(shí)上是一種能通過JAVA語言訪問任何結(jié)構(gòu)化數(shù)據(jù)庫的應(yīng)用程序接口(API)(Sun這樣說的,我也不知道是不是真的),而且現(xiàn)在的JDBC 3.0據(jù)Sun說也能訪問Execel等電子表格程序!
JDBC對(duì)于數(shù)據(jù)庫的訪問有四種方式,我們這里只是介紹兩種:
第一種是通過ODBC做為“橋”(Bridge)對(duì)數(shù)據(jù)庫訪問,第二種是直接對(duì)數(shù)據(jù)庫訪問。
我們先來看看第一種JDBC<-->ODBC訪問的流程:
JDBC Driver Mannager->JDBC<->ODBC橋->ODBC->數(shù)據(jù)庫客戶機(jī)驅(qū)動(dòng)庫->數(shù)據(jù)庫服務(wù)器->返回查詢結(jié)果,在這種訪問中值的我們注意的是雖然JAVA是"Write Once ,Run Anywhere",但是如果通過這種訪問的話,需要客戶端必須設(shè)置ODBC和有相應(yīng)的數(shù)據(jù)庫客戶機(jī)的驅(qū)動(dòng),當(dāng)你看了下面的另外一個(gè)流程的時(shí)候或許你會(huì)想:明明下一種更方面,為什么還要有這個(gè)東西的產(chǎn)生!呵呵,因?yàn)?,未必所有的?shù)據(jù)庫服務(wù)器提供商都提供下面的JDBC驅(qū)動(dòng)程序(給JDBC訪問提供相應(yīng)的接口),所以就有了JDBC<->ODBC Bridge。
接著再讓我們來看看第二種訪問流程:
JDBC Driver Mannager->局部JDBC驅(qū)動(dòng)->客戶端數(shù)據(jù)庫->數(shù)據(jù)庫服務(wù)器->返回查詢結(jié)果,這種訪問事實(shí)上是轉(zhuǎn)換JDBC調(diào)用為相應(yīng)的數(shù)據(jù)庫(Oracle, Sybase, Informix, DB2, 和其他的數(shù)據(jù)庫數(shù)據(jù)庫管理系統(tǒng))的客戶端API調(diào)用(這么說,不知道大家能不能懂,說簡(jiǎn)單點(diǎn)就好像ASP不是通過DSN對(duì)數(shù)據(jù)庫訪問而是通過OLEDB訪問,說道這里我還是不知道大家能不能明白我的意思。哎呀,不要扔雞蛋嘛!),這種方式的訪問需要相應(yīng)的數(shù)據(jù)庫提供商提供相應(yīng)的JDBC驅(qū)動(dòng)程序,但是有一種好處,可以獨(dú)立于odbc用于可以隨處可Run的客戶端的瀏覽器中的Applet程序。
我們下面將給大家一個(gè)通過JDBC-ODBC橋數(shù)據(jù)庫訪問的實(shí)例,但是在看下面的事例前我想問大家一次:JDK1.3裝了嗎?數(shù)據(jù)庫驅(qū)動(dòng)裝了嗎(我使用的是SQLserver)?你該沒有使用Linux吧?雖然java支持Linux,但是老兄我可沒有使用Linux喲(這同JAVA的Write Once ,Run Anywhere沒有關(guān)系),由于使用了運(yùn)行于Win下面的ODBC,我建議你看看這篇東西http://www.aspcn.com/showarticle.asp?id=112,否則你要是有了問題,出不了結(jié)果那豈不是要怪我(不過欲加之罪,何患無吃... ...),冤枉呀!
哎呀,說了這么多的廢話,還是讓我們來看看到底JDBC的調(diào)用吧!既然我們是通過odbc訪問數(shù)據(jù)庫,所以這個(gè)odbc是跑不了的,我們先來設(shè)置你的odbc:打開你的odbc數(shù)據(jù)源->選擇系統(tǒng)dsn(Click加新的dsn-)->接下來輸入選擇數(shù)據(jù)庫類型、輸入dsn名:、選擇服務(wù)器、連接數(shù)據(jù)庫的方式、輸入數(shù)據(jù)庫的登陸用戶和密碼->測(cè)試連接,如果測(cè)試成功的話,那么你的dsn就建立好了,我的dsn名為Sqlserver.使用的是sqlserver7.0,以 “sa”登陸,密碼為空。這些東西都是后面要用道的!
好了下面讓我們來看程序代碼: (該代碼已經(jīng)通過運(yùn)行)
//###########################################################
//代碼開始
import java.sql.*;
//加載java數(shù)據(jù)連接包,java基本所有的數(shù)據(jù)庫的調(diào)用的都在這個(gè)東西里面
public class InsertCoffees {
public static void main(String args[]) {
String url = "jdbc:odbc:sqlserver";
//取得連接的url名,注意sqlserver是dsn名
Connection con;
//實(shí)例化一個(gè)Connection對(duì)象
Statement stmt;
String query = "select * from col_link";
//選擇所有的Col_link表中的數(shù)據(jù)輸出
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//加載jdbc-odbc橋驅(qū)動(dòng)
} catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
//加載jdbc-odbc橋錯(cuò)誤
System.err.println(e.getMessage());
//其他錯(cuò)誤
}
try {
con = DriverManager.getConnection(url, "sa", "");
//數(shù)據(jù)庫連接
stmt = con.createStatement();
//Create 一個(gè)聲明
stmt.executeUpdate("CREATE TABLE col_link (sitename varchar (20) NULL ,siteurl varchar (50) NULL) ");
//執(zhí)行了一個(gè)sql語句生成了一個(gè)表col_link的表
stmt.executeUpdate("insert into col_link values('ASP中華網(wǎng)','http://www.aspcn.com')");
stmt.executeUpdate("insert into col_link values('永遠(yuǎn)到底有多遠(yuǎn)','http://xuankong.com')");
//執(zhí)行一個(gè)insert into語句
stmt.executeUpdate("update col_link set siteurl='http://www.aspcn.com/xuankong/xuankongt.jpg' where siteurl='http://xuankong.com'");
//執(zhí)行一個(gè)update語句,更新數(shù)據(jù)庫
ResultSet rs = stmt.executeQuery(query);
//返回一個(gè)結(jié)果集
System.out.println("Col_link表中的數(shù)據(jù)如下(原始數(shù)據(jù))");
//下面的語句使用了一個(gè)while循環(huán)打印出了col_link表中的所有的數(shù)據(jù)
System.out.println("站點(diǎn)名 "+" "+"站點(diǎn)地址");
System.out.println("---------------"+" "+"----------------");
while (rs.next()) {
String s = rs.getString("sitename");
String f = rs.getString("siteurl");
//取得數(shù)據(jù)庫中的數(shù)據(jù)
System.out.println(s + " " + f);
/*String t = rs.getString(1);
String l = rs.getString(2);
System.out.println(t + " " + l);*/
/*jdbc提供了兩種方法識(shí)別字段,一種是使用getXXX(注意這里的getXXX表示取不同類型字段的不同的方法)獲得字段名,
第二種*是通過字段索引,在這里我把第二種方法注釋了*/
/*你可以訪問這個(gè)連接獲得getxxx的用法:http://java.sun.com/docs/books/tutorial/jdbc/basics/_retrievingTable.html*/
}
stmt.close();
con.close();
//上面的語句關(guān)閉聲明和連接
} catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
//顯示數(shù)據(jù)庫連接錯(cuò)誤或者查詢錯(cuò)誤
}
}
}
//代碼結(jié)束
JAVA語言的跨平臺(tái)的工作能力(Write Once ,Run Anywhere)、優(yōu)秀的圖像處理能力(我相信現(xiàn)在沒有那種語言可以超過JAVA在網(wǎng)絡(luò)上的圖形處理能力)、網(wǎng)絡(luò)通信功能、通過JDBC數(shù)據(jù)庫訪問技術(shù)等等,讓我們誰都不可否認(rèn)JAVA語言是SUN公司對(duì)于計(jì)算機(jī)界的一個(gè)巨大的貢獻(xiàn)。筆者可以描述這樣一個(gè)場(chǎng)景:有一天你上網(wǎng)完全可以不用IE 或者NETSCAPE,上網(wǎng)就像是玩游戲,你可以獲得游戲那么精美的圖像和互動(dòng)的感覺,如果你玩過UO,也許你就知道那種感覺了,但是JAVA做成的東西一定會(huì)超過UO的,因?yàn)椴粏螁问怯螒?,也不是單單是瀏覽器,如果你愿意(要你有錢,有時(shí)間,有優(yōu)秀的JAVA人才)你可以把所有的這一切用Java完全集成出來?。?!我不是夸大JAVA的功能,大家可以訪問一下http://www.simchina.net的那個(gè)社區(qū)程序,你就能找到一種感覺了:相信我沒有說什么假話 。好了,不說廢話了,現(xiàn)在我向你介紹JAVA的數(shù)據(jù)庫訪問技術(shù)----JDBC數(shù)據(jù)庫訪問技術(shù)(你可千萬不要搞成ODBC了?。?
JDBC技術(shù)事實(shí)上是一種能通過JAVA語言訪問任何結(jié)構(gòu)化數(shù)據(jù)庫的應(yīng)用程序接口(API)(Sun這樣說的,我也不知道是不是真的),而且現(xiàn)在的JDBC 3.0據(jù)Sun說也能訪問Execel等電子表格程序!
JDBC對(duì)于數(shù)據(jù)庫的訪問有四種方式,我們這里只是介紹兩種:
第一種是通過ODBC做為“橋”(Bridge)對(duì)數(shù)據(jù)庫訪問,第二種是直接對(duì)數(shù)據(jù)庫訪問。
我們先來看看第一種JDBC<-->ODBC訪問的流程:
JDBC Driver Mannager->JDBC<->ODBC橋->ODBC->數(shù)據(jù)庫客戶機(jī)驅(qū)動(dòng)庫->數(shù)據(jù)庫服務(wù)器->返回查詢結(jié)果,在這種訪問中值的我們注意的是雖然JAVA是"Write Once ,Run Anywhere",但是如果通過這種訪問的話,需要客戶端必須設(shè)置ODBC和有相應(yīng)的數(shù)據(jù)庫客戶機(jī)的驅(qū)動(dòng),當(dāng)你看了下面的另外一個(gè)流程的時(shí)候或許你會(huì)想:明明下一種更方面,為什么還要有這個(gè)東西的產(chǎn)生!呵呵,因?yàn)?,未必所有的?shù)據(jù)庫服務(wù)器提供商都提供下面的JDBC驅(qū)動(dòng)程序(給JDBC訪問提供相應(yīng)的接口),所以就有了JDBC<->ODBC Bridge。
接著再讓我們來看看第二種訪問流程:
JDBC Driver Mannager->局部JDBC驅(qū)動(dòng)->客戶端數(shù)據(jù)庫->數(shù)據(jù)庫服務(wù)器->返回查詢結(jié)果,這種訪問事實(shí)上是轉(zhuǎn)換JDBC調(diào)用為相應(yīng)的數(shù)據(jù)庫(Oracle, Sybase, Informix, DB2, 和其他的數(shù)據(jù)庫數(shù)據(jù)庫管理系統(tǒng))的客戶端API調(diào)用(這么說,不知道大家能不能懂,說簡(jiǎn)單點(diǎn)就好像ASP不是通過DSN對(duì)數(shù)據(jù)庫訪問而是通過OLEDB訪問,說道這里我還是不知道大家能不能明白我的意思。哎呀,不要扔雞蛋嘛!),這種方式的訪問需要相應(yīng)的數(shù)據(jù)庫提供商提供相應(yīng)的JDBC驅(qū)動(dòng)程序,但是有一種好處,可以獨(dú)立于odbc用于可以隨處可Run的客戶端的瀏覽器中的Applet程序。
我們下面將給大家一個(gè)通過JDBC-ODBC橋數(shù)據(jù)庫訪問的實(shí)例,但是在看下面的事例前我想問大家一次:JDK1.3裝了嗎?數(shù)據(jù)庫驅(qū)動(dòng)裝了嗎(我使用的是SQLserver)?你該沒有使用Linux吧?雖然java支持Linux,但是老兄我可沒有使用Linux喲(這同JAVA的Write Once ,Run Anywhere沒有關(guān)系),由于使用了運(yùn)行于Win下面的ODBC,我建議你看看這篇東西http://www.aspcn.com/showarticle.asp?id=112,否則你要是有了問題,出不了結(jié)果那豈不是要怪我(不過欲加之罪,何患無吃... ...),冤枉呀!
哎呀,說了這么多的廢話,還是讓我們來看看到底JDBC的調(diào)用吧!既然我們是通過odbc訪問數(shù)據(jù)庫,所以這個(gè)odbc是跑不了的,我們先來設(shè)置你的odbc:打開你的odbc數(shù)據(jù)源->選擇系統(tǒng)dsn(Click加新的dsn-)->接下來輸入選擇數(shù)據(jù)庫類型、輸入dsn名:、選擇服務(wù)器、連接數(shù)據(jù)庫的方式、輸入數(shù)據(jù)庫的登陸用戶和密碼->測(cè)試連接,如果測(cè)試成功的話,那么你的dsn就建立好了,我的dsn名為Sqlserver.使用的是sqlserver7.0,以 “sa”登陸,密碼為空。這些東西都是后面要用道的!
好了下面讓我們來看程序代碼: (該代碼已經(jīng)通過運(yùn)行)
//###########################################################
//代碼開始
import java.sql.*;
//加載java數(shù)據(jù)連接包,java基本所有的數(shù)據(jù)庫的調(diào)用的都在這個(gè)東西里面
public class InsertCoffees {
public static void main(String args[]) {
String url = "jdbc:odbc:sqlserver";
//取得連接的url名,注意sqlserver是dsn名
Connection con;
//實(shí)例化一個(gè)Connection對(duì)象
Statement stmt;
String query = "select * from col_link";
//選擇所有的Col_link表中的數(shù)據(jù)輸出
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//加載jdbc-odbc橋驅(qū)動(dòng)
} catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
//加載jdbc-odbc橋錯(cuò)誤
System.err.println(e.getMessage());
//其他錯(cuò)誤
}
try {
con = DriverManager.getConnection(url, "sa", "");
//數(shù)據(jù)庫連接
stmt = con.createStatement();
//Create 一個(gè)聲明
stmt.executeUpdate("CREATE TABLE col_link (sitename varchar (20) NULL ,siteurl varchar (50) NULL) ");
//執(zhí)行了一個(gè)sql語句生成了一個(gè)表col_link的表
stmt.executeUpdate("insert into col_link values('ASP中華網(wǎng)','http://www.aspcn.com')");
stmt.executeUpdate("insert into col_link values('永遠(yuǎn)到底有多遠(yuǎn)','http://xuankong.com')");
//執(zhí)行一個(gè)insert into語句
stmt.executeUpdate("update col_link set siteurl='http://www.aspcn.com/xuankong/xuankongt.jpg' where siteurl='http://xuankong.com'");
//執(zhí)行一個(gè)update語句,更新數(shù)據(jù)庫
ResultSet rs = stmt.executeQuery(query);
//返回一個(gè)結(jié)果集
System.out.println("Col_link表中的數(shù)據(jù)如下(原始數(shù)據(jù))");
//下面的語句使用了一個(gè)while循環(huán)打印出了col_link表中的所有的數(shù)據(jù)
System.out.println("站點(diǎn)名 "+" "+"站點(diǎn)地址");
System.out.println("---------------"+" "+"----------------");
while (rs.next()) {
String s = rs.getString("sitename");
String f = rs.getString("siteurl");
//取得數(shù)據(jù)庫中的數(shù)據(jù)
System.out.println(s + " " + f);
/*String t = rs.getString(1);
String l = rs.getString(2);
System.out.println(t + " " + l);*/
/*jdbc提供了兩種方法識(shí)別字段,一種是使用getXXX(注意這里的getXXX表示取不同類型字段的不同的方法)獲得字段名,
第二種*是通過字段索引,在這里我把第二種方法注釋了*/
/*你可以訪問這個(gè)連接獲得getxxx的用法:http://java.sun.com/docs/books/tutorial/jdbc/basics/_retrievingTable.html*/
}
stmt.close();
con.close();
//上面的語句關(guān)閉聲明和連接
} catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
//顯示數(shù)據(jù)庫連接錯(cuò)誤或者查詢錯(cuò)誤
}
}
}
//代碼結(jié)束
相關(guān)文章
SQLServer查詢所有數(shù)據(jù)庫名和表名及表結(jié)構(gòu)等代碼示例
SQL Server是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),可以使用SQL語言來查詢表結(jié)構(gòu),這篇文章主要給大家介紹了關(guān)于SQLServer查詢所有數(shù)據(jù)庫名和表名及表結(jié)構(gòu)等的相關(guān)資料,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11SQL Server中日期時(shí)間函數(shù)的用法詳解
本文詳細(xì)講解了SQL Server中日期時(shí)間函數(shù)的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05SQL Server連接中三個(gè)常見的錯(cuò)誤分析
SQL Server連接中三個(gè)常見的錯(cuò)誤分析...2007-03-03sqlserver數(shù)據(jù)庫移動(dòng)數(shù)據(jù)庫路徑的腳本示例
前段時(shí)間做過這么一件事情,把原本放在c盤的所有數(shù)據(jù)庫(除了sql server系統(tǒng)文件外)文件Move到D盤,主要是為了方便后續(xù)管理以及減少磁盤I/O阻塞(C,D是2個(gè)獨(dú)立磁盤)。腳本需輸入2個(gè)參數(shù):目標(biāo)數(shù)據(jù)庫名字和目標(biāo)目錄2013-12-12SQL Server 總結(jié)復(fù)習(xí) (二)
SQL Server 總結(jié)復(fù)習(xí),學(xué)習(xí)sqlserver的朋友可以參考下2012-08-08基于B-樹和B+樹的使用:數(shù)據(jù)搜索和數(shù)據(jù)庫索引的詳細(xì)介紹
本篇文章介紹了,基于B-樹和B+樹的使用:數(shù)據(jù)搜索和數(shù)據(jù)庫索引的詳細(xì)分析。需要的朋友參考下2013-04-04SQL Server代理:理解SQL代理錯(cuò)誤日志處理方法
SQL Server代理是所有實(shí)時(shí)數(shù)據(jù)庫的核心,代理有很多不明顯的用法,因此系統(tǒng)的知識(shí),對(duì)于開發(fā)人員還是DBA都是有用的,這系列文章會(huì)通俗介紹它的很多用法2021-06-06CASE表達(dá)式實(shí)現(xiàn)基于條件邏輯來返回一個(gè)值
針對(duì)一列,基于條件邏輯來返回一個(gè)值,那么,這時(shí)候就需要使用到CASE表達(dá)式了,下面是具體的應(yīng)用2014-07-07