|
老師決定期末考試采用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("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);
以上便是三種方式獲取連接。接下來便是顯示的代碼了。代碼如下所示:
復制代碼 代碼如下:
<%@ 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代碼如下所示:
<%@ 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>JDBC連接Access數據庫的第二種方式</title> </head> <body> <table border="1" width="40%"> <tr bgcolor="red"> <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:driver={Microsoft Access Driver (*.mdb)};DBQ="+"e://student.mdb "; 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代碼如下所示:
<%@ 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>JDBC連接Access數據庫的第三種方式</title> </head> <body> <table border="1" width="40%"> <tr bgcolor="blue"> <th>學號</th> <th>姓名</th> <th>年齡</th> <th>地址</th> <th>語文</th> <th>數學</th> <th>英語</th> </tr> <% 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); 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結果如下所示:
對于這種方式我的項目的目錄結構如下所示:
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()方法

jsp技術:Java Web項目中連接Access數據庫的配置方法,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。