Java Web項目中串連Access資料庫的配置方法

來源:互聯網
上載者:User

標籤:access   資料庫   

        本文是對前幾天的“JDBC串連Access資料庫的幾種方式”這篇的升級。由於在做一些小項目的時候遇到的問題,因此才決定寫這篇部落格的。昨天已經將部落格發布了,但是後來經過一些驗證有點問題,所以今天改了一下重新的發布了

老師決定期末考試採用access資料庫實現增刪改查,我認為現在的我已經沒有問題了,但是以前都是在JSP頁面中串連access資料庫,無論是以下的那種方式都進行了串連的練習,但是現在我想讓我的項目中的訪問access資料庫的java代碼,封裝到DAO中,在DAO中串連資料庫,沒有和Servlet API有任何的關係。對於大多數人都會優先選擇使用ODBC資料來源的方式或者是使用絕對路徑的方式串連access資料庫,但是我個人認為,這樣做不太好,如果採用這樣的方式,項目做好後,放到他人的伺服器上是無法啟動並執行,因為資料庫的資訊不存在了,而我現在的想法是無論項目放那一台支援jdbc-odbc機器的伺服器上都可以串連資料庫,並運行項目,所以要完成這樣的操作,只有在讓access資料庫的mdb檔案隨著項目的移動而移動,因此,在Java Web項目,將mdb檔案放入到WebRoot下或者其子目錄下。但是在DAO中如何得到該mdb的真實路徑呢?

其實,這個和在JSP中動態得到mdb檔案的路徑的思想基本上是一樣。

先複習一下jsp中使用access資料庫吧!

例如有如下的Access資料庫student,表basic,以及6條記錄,現在通過幾種方式在Jsp中將他們的資料顯示出來。:

對於幾種串連Access資料庫的方式,基本上都是基於JDBC-ODBC方式的,當然也有純JDBC驅動的方式。這裡我暫時就不說了。對於這幾種方式,除了取得串連之處不同外,其他的代碼都是一樣的。所以這裡先寫出取得串連的幾種方式,然後再用完整的代碼進行顯示。

方式一:通過JDBC-ODBC方式橋連直接連接:

1、對於這種方式,首先要建立ODBC資料來源,我的系統是Win7系統,所以依次選擇“控制台----管理工具----資料來源(ODBC)”,開啟資料來源管理器,:

2、在“系統DSN”選項卡中,單擊“添加”按鈕,開啟建立資料來源對話方塊,選擇Access資料庫的驅動程式“Microsoft Access Driver(*.mdb)”:

3、單擊完成按鈕,出現如下對話方塊,在資料來源名中輸入資料來源的名字“JDBC-ODBC”,單擊選擇按鈕,選擇要操作的資料庫“student.mdb”,單擊確定按鈕完成資料來源的配置。:

4、資料來源配置好了,就可以寫擷取串連的代碼了,如下所示:

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


以上的三行代碼就是通過JDBC-ODBC串連Access資料庫的關鍵代碼。這種方式串連可以很方便的記憶串連的url代碼,這是很有用的。後面的代碼就是正常寫了。

方式二:通過資料庫所在的絕對路徑方式串連

上面說過這裡的幾種方式都是基於JDBC-ODBC方式。所以載入驅動的Class.forName()中的參數都是“sun.jdbc.odbc.JdbcOdbcDriver”。對於這種方式我將student.mdb檔案放在了e盤的根目錄下,在使用的時候,直接寫上該資料庫的絕對路徑就行了。擷取串連的代碼如下所示:

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


對於這種方式不用配置資料來源,雖然代碼比較多,但是很好理解的。也是很常用的。

方式三:通過請求來擷取資料庫的絕對路徑方式串連

對於這種方式,我個人認為很適合在Java Web應用中使用,將做好的應用給別人,別人也可以使用。我將該資料庫檔案放在了Web應用的根路徑下。那麼動態擷取串連的代碼如下所示:

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


以上便是三種方式擷取串連。接下來便是顯示的代碼了。代碼如下所示:

複製代碼 代碼如下:
<%@ 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>學號</th>
<th>姓名</th>
<th>年齡</th>
<th>地址</th>
<th>語文</th>
<th>數學</th>
<th>英語</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>


運行JSP結果如下所示:

當將串連改為第二種方式的時候還是好使的,JSP代碼如下所示:

運行JSP結果如下所示:

當將串連改為第三種方式的時候還是好使的,JSP代碼如下所示:

運行JSP結果如下所示:

對於這種方式我的項目的目錄結構如下所示:

第三種方式正是現在要用的方式,可以在Java類中,訪問資料庫了。首先將mdb檔案放入到WebRoot下面,當點擊超連結的時候,將資訊傳給Servlet,在Servlet中寫上如下的語句: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中就可以根據傳過來的path找到資料庫檔案所在的路徑了。並成功的串連到資料庫了,實現了分層理念。但是這樣出現了一個問題,如果放在WebRoot下,別人知道資料庫的位置,不就可以訪問了嗎?為此我想了好久,既然是在Java類中訪問資料庫,那麼能不能將mdb檔案放在src下邊呢,答案是可以的。這樣在MyEclipse或Eclipse中,就將該檔案複製到了Web項目的WEB-INF下的classes根路徑下,不就能訪問了,於是我的URL代碼變成了這樣:String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=student.mdb ";但是結果失敗了,沒有找到檔案,但後來將該檔案放到“項目”下,就好使了,但是這樣一旦給別人,就又不行了,所以還得放到src下,只有這樣才會放到WebRoot或WebContent下,才會放到classes下,才能被java類所訪問,才能給別人項目就能運行。但是如何才能找到classes目錄下的資料庫檔案呢。一直在找某個方法,直到找到了如下的方法:方法一:Class類的getResource()方法或者是ClassLoader類的
方法二:URL類的getPath()方法通過Class類的getResource()方法尋找當前類所在的目錄,這裡dao類在com.student.dao包下,那麼該方法返回的就是該類的路徑,如果參數是“/”的化,返回的就是classes的根目錄,這樣就可以得到classes下的資料庫mdb檔案的所在路徑。再通過URL類的getPath()方法得到字串類型的檔案路徑在伺服器上的真實路徑。代碼如下所示:String path = this.getClass().getResource("/").getPath().replaceAll("%20"," ");//replaceAll方法是為瞭解決路徑中含有空格字元的問題path = path.substring(1,path.length());//對路徑進行截取,獲得的路徑前邊會多加一個杠Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+path+"student.mdb";con = DriverManager.getConnection(url);將以上的代碼封裝DAO中,就可以訪問到資料庫了。就可以在Java Web項目中,使用Access資料庫實現MVC設計模式,並添加DAO和VO了。對於使用Servlet API將mdb檔案的路徑傳給dao是一種方式,使用dao封裝Access也是一種方式,有時為了方便可以將mdb檔案放到WebRoot下,通過JSP或者是Servlet將資料庫檔案的路徑傳給dao。我覺的Access資料庫這一點比較好,可以將資料庫和項目一起移動。通關這兩種方式可以再任何的機器上運行。目前,我所知道的就是這麼做,我也認為這是比較好的作法。用Java語言串連資料庫,將資料庫檔案放在和類路徑相同的目錄下是很好的作法。如果還有其他的辦法,希望大家提出來。本文是對前幾天的“JDBC串連Access資料庫的幾種方式”這篇的升級。由於在做一些小項目的時候遇到的問題,因此才決定寫這篇部落格的。昨天已經將部落格發布了,但是後來經過一些驗證有點問題,所以今天改了一下重新的發布了

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Java Web項目中串連Access資料庫的配置方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.