一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

Java Web項(xiàng)目中連接Access數(shù)據(jù)庫(kù)的配置方法

老師決定期末考試采用access數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查,我認(rèn)為現(xiàn)在的我已經(jīng)沒(méi)有問(wèn)題了,但是以前都是在JSP頁(yè)面中連接access數(shù)據(jù)庫(kù),無(wú)論是以下的那種方式都進(jìn)行了連接的練習(xí),但是現(xiàn)在我想讓我的項(xiàng)目中的訪問(wèn)access數(shù)據(jù)庫(kù)的Java代碼,封裝到DAO中,在DAO中連接數(shù)據(jù)庫(kù),沒(méi)有和Servlet API有任何的關(guān)系。對(duì)于大多數(shù)人都會(huì)優(yōu)先選擇使用ODBC數(shù)據(jù)源的方式或者是使用絕對(duì)路徑的方式連接access數(shù)據(jù)庫(kù),但是我個(gè)人認(rèn)為,這樣做不太好,如果采用這樣的方式,項(xiàng)目做好后,放到他人的服務(wù)器上是無(wú)法運(yùn)行的,因?yàn)閿?shù)據(jù)庫(kù)的信息不存在了,而我現(xiàn)在的想法是無(wú)論項(xiàng)目放那一臺(tái)支持jdbc-odbc機(jī)器的服務(wù)器上都可以連接數(shù)據(jù)庫(kù),并運(yùn)行項(xiàng)目,所以要完成這樣的操作,只有在讓access數(shù)據(jù)庫(kù)的mdb文件隨著項(xiàng)目的移動(dòng)移動(dòng),因此,在Java Web項(xiàng)目,將mdb文件放入到WebRoot下或者其子目錄下。但是在DAO中如何得到該mdb的真實(shí)路徑呢?

其實(shí),這個(gè)和在JSP中動(dòng)態(tài)的得到mdb文件的路徑的思想基本上是一樣。

先復(fù)習(xí)一下jsp中使用access數(shù)據(jù)庫(kù)吧!

例如有如下的Access數(shù)據(jù)庫(kù)student,表basic,以及6條記錄,現(xiàn)在通過(guò)幾種方式在Jsp中將他們的數(shù)據(jù)顯示出來(lái)。如圖所示:

對(duì)于幾種連接Access數(shù)據(jù)庫(kù)的方式,基本上都是基于JDBC-ODBC方式的,當(dāng)然也有純JDBC驅(qū)動(dòng)的方式。這里我暫時(shí)就不說(shuō)了。對(duì)于這幾種方式,除了取得連接之處不同外,其他的代碼都是一樣的。所以這里先寫出取得連接的幾種方式,然后再用完整的代碼進(jìn)行顯示。

方式一:通過(guò)JDBC-ODBC方式橋連直接連接:

1、對(duì)于這種方式,首先要建立ODBC數(shù)據(jù)源,我的系統(tǒng)是Win7系統(tǒng),所以依次選擇“控制面板----管理工具----數(shù)據(jù)源(ODBC)”,打開(kāi)數(shù)據(jù)源管理器,如圖所示:

2、在“系統(tǒng)DSN”選項(xiàng)卡中,單擊“添加”按鈕,打開(kāi)創(chuàng)建數(shù)據(jù)源對(duì)話框,選擇Access數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序“Microsoft Access Driver(*.mdb)”如圖所示:

3、單擊完成按鈕,出現(xiàn)如下對(duì)話框,在數(shù)據(jù)源名中輸入數(shù)據(jù)源的名字“JDBC-ODBC”,單擊選擇按鈕,選擇要操作的數(shù)據(jù)庫(kù)“student.mdb”,單擊確定按鈕完成數(shù)據(jù)源的配置。如圖所示:

4、數(shù)據(jù)源配置好了,就可以寫獲取連接的代碼了,如下所示:

復(fù)制代碼 代碼如下:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:JDBC-ODBC";
Connection con = DriverManager.getConnection(url);


以上的三行代碼就是通過(guò)JDBC-ODBC連接Access數(shù)據(jù)庫(kù)的關(guān)鍵代碼。這種方式連接可以很方便的記憶連接的url代碼,這是很有用的。后面的代碼就是正常寫了。

方式二:通過(guò)數(shù)據(jù)庫(kù)所在的絕對(duì)路徑方式連接

上面說(shuō)過(guò)這里的幾種方式都是基于JDBC-ODBC方式。所以加載驅(qū)動(dòng)的Class.forName()中的參數(shù)都是“sun.jdbc.odbc.JdbcOdbcDriver”。對(duì)于這種方式我將student.mdb文件放在了e盤的根目錄下,在使用的時(shí)候,直接寫上該數(shù)據(jù)庫(kù)的絕對(duì)路徑就行了。獲取連接的代碼如下所示:

復(fù)制代碼 代碼如下:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+"e://student.mdb ";
Connection con = DriverManager.getConnection(url);


對(duì)于這種方式不用配置數(shù)據(jù)源,雖然代碼比較多,但是很好理解的。也是很常用的。

方式三:通過(guò)請(qǐng)求來(lái)獲取數(shù)據(jù)庫(kù)的絕對(duì)路徑方式連接

對(duì)于這種方式,我個(gè)人認(rèn)為很適合在Java Web應(yīng)用中使用,將做好的應(yīng)用給別人,別人也可以使用。我將該數(shù)據(jù)庫(kù)文件放在了Web應(yīng)用的根路徑下。那么動(dòng)態(tài)的獲取連接的代碼如下所示:

復(fù)制代碼 代碼如下:
String path = application.getRealPath("/index.jsp");
path = path.substring(0,path.lastIndexOf("http://"))+"http://";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+path+"student.mdb ";
Connection con = DriverManager.getConnection(url);


以上便是三種方式獲取連接。接下來(lái)便是顯示的代碼了。代碼如下所示:

復(fù)制代碼 代碼如下:
<%@ page language="Java" import="Java.util.*,Java.sql.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Access</title>
</head>
<body>
<table border="1" width="40%">
<tr bgcolor="gray">
<th>學(xué)號(hào)</th>
<th>姓名</th>
<th>年齡</th>
<th>地址</th>
<th>語(yǔ)文</th>
<th>數(shù)學(xué)</th>
<th>英語(yǔ)</th>
</tr>
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:JDBC-ODBC";
Connection con = DriverManager.getConnection(url);
Statement st = con.createStatement();
String sql = "select * from basic";
ResultSet rs = st.executeQuery(sql);
while(rs.next())
{
%>
<tr>
<td><%=rs.getString(1) %></td>
<td><%=rs.getString(2) %></td>
<td><%=rs.getInt(3) %></td>
<td><%=rs.getString(4) %></td>
<td><%=rs.getInt(5) %></td>
<td><%=rs.getInt(6) %></td>
<td><%=rs.getInt(7) %></td>
</tr>
<%
}
rs.close();
st.close();
con.close();
%>
</table>
</body>
</html>


運(yùn)行JSP結(jié)果如下所示:

當(dāng)將連接改為第二種方式的時(shí)候還是好使的,JSP代碼如下所示:

運(yùn)行JSP結(jié)果如下所示:

當(dāng)將連接改為第三種方式的時(shí)候還是好使的,JSP代碼如下所示:

運(yùn)行JSP結(jié)果如下所示:

對(duì)于這種方式我的項(xiàng)目的目錄結(jié)構(gòu)如下所示:

第三種方式正是現(xiàn)在要用的方式,可以在Java類中,訪問(wèn)數(shù)據(jù)庫(kù)了。首先將mdb文件放入到WebRoot下面,當(dāng)點(diǎn)擊超鏈接的時(shí)候,將信息傳給Servlet,在Servlet中寫上如下的語(yǔ)句:String path = request.getServletContext().getRealPath("/");
Dao dao = new Dao();
dao.init(path);
在dao的init()方法中初始化Connection連接:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+path+"student.mdb ";
Connection con = DriverManager.getConnection(url);這樣在dao中就可以根據(jù)傳過(guò)來(lái)的path找到數(shù)據(jù)庫(kù)文件所在的路徑了。并成功的連接到數(shù)據(jù)庫(kù)了,實(shí)現(xiàn)了分層理念。但是這樣出現(xiàn)了一個(gè)問(wèn)題,如果放在WebRoot下,別人知道數(shù)據(jù)庫(kù)的位置,不就可以訪問(wèn)了嗎?為此我想了好久,既然是在Java類中訪問(wèn)數(shù)據(jù)庫(kù),那么能不能將mdb文件放在src下邊呢,答案是可以的。這樣在MyEclipse或Eclipse中,就將該文件復(fù)制到了Web項(xiàng)目的WEB-INF下的classes根路徑下,不就能訪問(wèn)了,于是我的URL代碼變成了這樣:String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=student.mdb ";但是結(jié)果失敗了,沒(méi)有找到文件,但后來(lái)將該文件放到“項(xiàng)目”下,就好使了,但是這樣一旦給別人,就又不行了,所以還得放到src下,只有這樣才會(huì)放到WebRoot或WebContent下,才會(huì)放到classes下,才能被Java類所訪問(wèn),才能給別人項(xiàng)目就能運(yùn)行。但是如何才能找到classes目錄下的數(shù)據(jù)庫(kù)文件呢。一直在找某個(gè)方法,直到找到了如下的方法:方法一:Class類的getResource()方法或者是ClassLoader類的
方法二:URL類的getPath()方法通過(guò)Class類的getResource()方法查找當(dāng)前類所在的目錄,這里dao類在com.student.dao包下,那么該方法返回的就是該類的路徑,如果參數(shù)是“/”的化,返回的就是classes的根目錄,這樣就可以得到classes下的數(shù)據(jù)庫(kù)mdb文件的所在路徑。再通過(guò)URL類的getPath()方法得到字符串類型的文件路徑在服務(wù)器上的真實(shí)路徑。代碼如下所示:String path = this.getClass().getResource("/").getPath().replaceAll("%20"," ");//replaceAll方法是為了解決路徑中含有空格字符的問(wèn)題path = path.substring(1,path.length());//對(duì)路徑進(jìn)行截取,獲得的路徑前邊會(huì)多加一個(gè)杠Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+path+"student.mdb";con = DriverManager.getConnection(url);將以上的代碼封裝DAO中,就可以訪問(wèn)到數(shù)據(jù)庫(kù)了。就可以在Java Web項(xiàng)目中,使用Access數(shù)據(jù)庫(kù)實(shí)現(xiàn)MVC設(shè)計(jì)模式,并添加DAO和VO了。對(duì)于使用Servlet API將mdb文件的路徑傳給dao是一種方式,使用dao封裝Access也是一種方式,有時(shí)為了方便可以將mdb文件放到WebRoot下,通過(guò)JSP或者是Servlet將數(shù)據(jù)庫(kù)文件的路徑傳給dao。我覺(jué)的Access數(shù)據(jù)庫(kù)這一點(diǎn)比較好,可以將數(shù)據(jù)庫(kù)和項(xiàng)目一起移動(dòng)。通關(guān)這兩種方式可以再任何的機(jī)器上運(yùn)行。目前,我所知道的就是這么做,我也認(rèn)為這是比較好的作法。用Java語(yǔ)言連接數(shù)據(jù)庫(kù),將數(shù)據(jù)庫(kù)文件放在和類路徑相同的目錄下是很好的作法。如果還有其他的辦法,希望大家提出來(lái)。

jsp技術(shù)Java Web項(xiàng)目中連接Access數(shù)據(jù)庫(kù)的配置方法,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 午夜视频免费国产在线 | 亚洲国产精品综合久久一线 | 国产日本一区二区三区 | 国内在线精品 | 国产日韩欧美精品一区二区三区 | 97久久人人| 午夜黄大色黄大片美女图片 | 欧美成人精品第一区二区三区 | 岛国欧美 | 国产高清精品入口麻豆 | 国产视频自拍一区 | 成人福利免费观看体验区 | 福利精品一区 | 在线播放黄 | 国产免费一区二区三区在线观看 | 亚洲精品无码专区在线播放 | 亚洲国产天堂久久综合 | 亚洲性影院 | 91精品国产综合久久消防器材 | 国产成人精品午夜二三区 | 视频一区二区三区免费观看 | 精品国产乱码一区二区三区 | 五月婷婷网址 | www.欧美com| 天天综合网网欲色 | bt7086福利一区二区三区最新 | www.色五月| 四虎影视永久在线精品免费 | 九九视频精品在线 | 狠狠色伊人亚洲综合网站l 狠狠色伊人亚洲综合网站色 | 久久伊人久久亚洲综合 | 久久综合一区二区 | 激情小说色图 | 成人福利视频网站 | 精品成人免费一区二区在线播放 | 亚色中文字幕 | 欧美一级精品 | 成人午夜性视频欧美成人 | 国产亚洲一欧美一区二区三区 | 免费在线观看黄网站 | 色多多在线 |