亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

Java Web項目中連接Access數據庫的配置方法

2020-07-27 21:37:33
字體:
來源:轉載
供稿:網友

老師決定期末考試采用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代碼如下所示:

運行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語言連接數據庫,將數據庫文件放在和類路徑相同的目錄下是很好的作法。如果還有其他的辦法,希望大家提出來。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久精品久久久| 精品自拍视频在线观看| 国语自产精品视频在免费| 欧美成人全部免费| 亚洲人成网站777色婷婷| 欧美精品在线观看| 91极品女神在线| 中文字幕亚洲天堂| 自拍偷拍亚洲欧美| www.99久久热国产日韩欧美.com| 狠狠躁夜夜躁人人爽天天天天97| 992tv在线成人免费观看| 久久久久久国产精品三级玉女聊斋| 精品国产欧美一区二区五十路| 精品日韩中文字幕| 啊v视频在线一区二区三区| 在线不卡国产精品| 777国产偷窥盗摄精品视频| 欧美高清视频在线播放| 久久精品成人动漫| 国产午夜精品全部视频播放| 成人写真福利网| 色噜噜狠狠狠综合曰曰曰88av| 亚洲第一页在线| 久久久免费高清电视剧观看| 久久久久国产一区二区三区| 在线观看中文字幕亚洲| 国产97在线视频| 国产精品第8页| 午夜精品视频网站| 欧美不卡视频一区发布| 91九色国产社区在线观看| 中文精品99久久国产香蕉| 亚洲精品国产精品久久清纯直播| 欧美亚洲国产成人精品| 亚洲国产精品久久久久秋霞不卡| 久久精品国产久精国产一老狼| 国产婷婷97碰碰久久人人蜜臀| 欧美巨乳美女视频| 中文字幕欧美亚洲| 韩国国内大量揄拍精品视频| 亚洲第一色在线| 国产亚洲欧美aaaa| 欧美一级电影久久| 精品女厕一区二区三区| 国产精品视频一区二区高潮| 亚洲午夜小视频| 国产成+人+综合+亚洲欧美丁香花| 日韩国产高清视频在线| 成人福利视频网| 激情亚洲一区二区三区四区| 亚洲精品视频中文字幕| 日韩电影第一页| 亚洲影院色在线观看免费| 国产精品无av码在线观看| 国产精品国产亚洲伊人久久| 欧美日韩国产精品| 91久久久久久久久久| 69av视频在线播放| 欧美日韩中文字幕在线| 国产亚洲精品久久久久久| 亚洲va欧美va国产综合剧情| 在线看片第一页欧美| 66m—66摸成人免费视频| 国产精品久久久久久久电影| 日韩在线观看免费| 久久精品最新地址| 日韩欧美在线第一页| 91系列在线观看| 欧美日韩中文字幕日韩欧美| 欧美第一页在线| 亚洲成人在线视频播放| 中文字幕免费精品一区| 亚洲丁香久久久| 成人黄色av网站| 成人性生交大片免费观看嘿嘿视频| 91香蕉电影院| 成人av电影天堂| 高清在线视频日韩欧美| 国产亚洲精品一区二555| 国产精品第100页| 777国产偷窥盗摄精品视频| 成人国产精品久久久久久亚洲| 尤物九九久久国产精品的分类| 欧美电影第一页| 欧美国产精品人人做人人爱| 亚洲成色999久久网站| 最近中文字幕2019免费| 亚洲另类欧美自拍| 中文字幕无线精品亚洲乱码一区| 国产91av在线| 久久久久久18| 亚洲电影av在线| 色悠悠久久久久| 欧美国产亚洲视频| 国产午夜精品全部视频在线播放| 久久久久久久久久久亚洲| 色妞在线综合亚洲欧美| 久久久亚洲福利精品午夜| 国产mv久久久| 国产啪精品视频| 久久久999精品免费| 三级精品视频久久久久| 久久久国产成人精品| 欧美美女18p| 国产精品成人aaaaa网站| 在线观看欧美日韩| 亚洲va码欧洲m码| 久久免费视频这里只有精品| 欧美激情在线狂野欧美精品| 18性欧美xxxⅹ性满足| 91精品国产综合久久久久久蜜臀| 国产成人精品免高潮在线观看| 97在线观看视频| 亚洲人成在线观看| 国产精品自拍视频| 91精品国产91久久久久久不卡| 精品国产一区二区三区久久狼5月| 欧美成人国产va精品日本一级| 日韩中文字在线| 精品高清美女精品国产区| 日韩av不卡在线| 亚洲成人免费在线视频| 欧美自拍视频在线| 夜夜嗨av色一区二区不卡| 亚洲精品自产拍| 欧美成人h版在线观看| 亚洲毛片一区二区| 欧美性xxxx在线播放| 亚洲第一区在线| 狠狠做深爱婷婷久久综合一区| 在线看欧美日韩| 日本国产精品视频| 欧洲成人在线视频| 亚洲激情视频网站| 日韩中文字幕视频在线| 国产精品普通话| 欧美国产日韩视频| 国产精品男女猛烈高潮激情| 欧美交受高潮1| 一本一本久久a久久精品牛牛影视| www.精品av.com| 日本免费久久高清视频| 久久韩国免费视频| 2019中文字幕在线观看| 亚洲美女精品久久| 亚洲人成电影在线播放| 欧美在线免费观看| 久久久免费精品视频| 7m第一福利500精品视频| 91久久精品美女高潮| 亚洲人成在线观看网站高清| 久久色免费在线视频| 国产精品看片资源| 色综合久久久888| 久久久久久久激情视频| 午夜免费日韩视频| 日韩黄在线观看| 久久久久久久国产精品视频| 91视频-88av| 久久成年人视频| 国产亚洲成av人片在线观看桃| 国产一区二区在线免费视频| 亚洲色无码播放|