本文是对前几天的“JDBC连接Access数据库的几种方式”这篇的升级。因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的。昨天已经将博客公布了。可是后来经过一些验证有点问题,所以今天改了一下又一次的公布了

老师决定期末考试採用access数据库实现增删改查。我觉得如今的我已经没有问题了。可是曾经都是在JSP页面中连接access数据库,不管是下面的那种方式都进行了连接的练习,可是如今我想让我的项目中的訪问access数据库的java代码,封装到DAO中,在DAO中连接数据库,没有和Servlet API有不论什么的关系。

对于大多数人都会优先选择使用ODBC数据源的方式或者是使用绝对路径的方式连接access数据库,可是我个人觉得,这样做不太好,假设採用这种方式,项目做好后。放到他人的server上是无法执行的,由于数据库的信息不存在了。而我如今的想法是不管项目放那一台支持jdbc-odbc机器的server上都能够连接数据库。并执行项目。所以要完毕这种操作,仅仅有在让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”选项卡中,单击“加入”button,打开创建数据源对话框。选择Access数据库的驱动程序“Microsoft Access Driver(*.mdb)”如图所看到的:

3、单击完毕button。出现例如以下对话框。在数据源名中输入数据源的名字“JDBC-ODBC”,单击选择button,选择要操作的数据库“student.mdb”,单击确定button完毕数据源的配置。如图所看到的:

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()方法得到字符串类型的文件路径在server上的真实路径。

代码例如以下所看到的:
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数据库的配置方法的更多相关文章

  1. java web 项目中获取当前路径的几种方法

    1.jsp中取得路径:   以工程名为TEST为例: (1)得到包含工程名的当前页面全路径:request.getRequestURI() 结果:/TEST/test.jsp (2)得到工程名:req ...

  2. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

  3. linux 下用renameTo方法修改java web项目中文件夹名称问题

    经测试,在Linux环境中安装tomcat,然后启动其中的项目,在项目中使用java.io.File.renameTo(File dest)方法可行. 之前在本地运行代码可以修改,然后传到Linux服 ...

  4. 对Java Web项目中路径的理解

    第一个:文件分隔符 坑比Window.window分隔符 用\;unix采用/.于是用File.separator来跨平台 请注意:这是文件路径.在File f = new File(“c:\\hah ...

  5. Java Web项目中缺少Java EE 6 Libraries怎么添加

    Java Web项目中缺少Java EE 6 Libraries怎么添加 具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build P ...

  6. java web 项目中 简单定时器实现 Timer

    java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报  分类: JAVA(24)  版权声明:本文为博 ...

  7. Java之——Web项目中DLL文件动态加载方法

    本文转自:https://blog.csdn.net/l1028386804/article/details/53903557 在Java Web项目中,我们经常会用到通过JNI调用dll动态库文件来 ...

  8. java web项目中打开资源文件中文乱码

    1 java web项目中经常使用多模块管理.在某一个模块中添加了一些资源文件.但不是启动项目.有时候需要在程序中读取资源文件内容,打包后放到容器中就不能正常运行了.需要将所有资源文件放到启动项目的 ...

  9. 在java web项目中编写自己的代码生成器

    在java web项目中编写自己的代码生成器

随机推荐

  1. 【11.9校内测试】【倒计时1天】【ak欢乐赛】【多项式计算模拟】

    然而AK失败了,就是因为这道摸你题:(最后一篇题解了吧?QAQ) Solution 模拟多项式乘法,其中的运算处理很像高精度,不过第$i$位代表的就是$x^i$前面的系数了. 好像去年的时候就讲了表达 ...

  2. 服务器被ddos攻击?分析如何防止DDOS攻击?

    上周知名博主阮一峰的博客被DDOS攻击,导致网站无法访问而被迫迁移服务器的事情,引起了广大网友的关注及愤慨,包括小编的个人博客也曾接受过DDOS的“洗礼”,对此感同身受.所以,本文我们一起来了解下DD ...

  3. axios 取消请求的方法

    开发中遇到需要取消请求的功能,,点击终止查询可以取消开始查询请求,再次点击开始查询又可以进行查询. 解决方法:axios官方文档上的CancelToken,一开始用了这个api后,可以成功取消请求,但 ...

  4. mysql报错:1130 -host 'localhost' is not allowed to connect to this mysql server

    错误提示:1130 -host 'localhost' is not allowed to connect to this mysql server 原因:手贱把mysql数据库系统中mysql数据库 ...

  5. java三大特性--多态(1)

    定义 对象具有多种形态 类型 引用的多态: 父类的引用指向自身对象 父类的引用指向子类对象 TrafficTool traffictool=new TrafficTool();//父类的引用指向本身类 ...

  6. STM32 逐次逼近寄存器型(SAR)模拟数字转换器(ADC)

    是采样速率低于5Msps (每秒百万次采样)的中等至高分辨率应用的常见结构. SAR ADC的分辨率一般为8位至16位,具有低功耗.小尺寸等特点. 这些特点使该类型ADC具有很宽的应用范围,例如便携/ ...

  7. C#高级编程----反射的小结

    C#反射的应用小结 1.何谓反射? 反射就是在运行的时候发现对象的相关信息.根据这些信息可以动态的执行对象的方法以及获取对象的属性所存储的值.使用.NET编写的代码时自动反射的,或者说是自我描述的.之 ...

  8. 给力开源,.Net开源地址大收集

    一.基础类库: 1,项目名:Npoi 资源星级:★★★ (个人评的) 介绍:NPOI - 一个能帮助你直接读写office文件流的库 系统教程:http://www.cnblogs.com/tonyq ...

  9. 如何用C#动态编译、执行代码

    在开始之前,先熟悉几个类及部分属性.方法:CSharpCodeProvider.ICodeCompiler.CompilerParameters.CompilerResults.Assembly. 一 ...

  10. 全景分割pipeline搭建

    全景分割pipeline搭建 整体方法使用语义分割和实例分割结果,融合标签得到全景分割结果: 数据集使用:panoptic_annotations_trainval2017和cityscapes; p ...