java web access_Java Web项目中连接Access数据库的配置方法
本文是对前几天的“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);
以上便是三种方式获取连接。接下来便是显示的代码了。代码例如以下所看到的:
Access
学号 | 姓名 | 年龄 | 地址 | 语文 | 数学 | 英语 |
---|
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())
{
%>
}
rs.close();
st.close();
con.close();
%>
执行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_Java Web项目中连接Access数据库的配置方法相关推荐
- php连接mssql数据库的几种方法,php 连接mssql数据库与配置方法_PHP教程
php 连接mssql数据库与配置方法 下面要来告诉各位朋友php连接mssql数据库并且与php mssql配置方法哦,这样如果你是初学者这文章可以让你从配置mssql 到让php连接mssql数据 ...
- sql数据库配置php,php 连接mssql数据库与配置方法
php 连接mssql数据库与配置方法 下面要来告诉各位朋友php连接mssql数据库并且与php mssql配置方法哦,这样如果你是初学者这文章可以让你从配置mssql 到让php连接mssql数据 ...
- 具体解释VB中连接access数据库的几种方法
在VB中,连接ACCESS数据库的方法主要有以下三种 使用ADO对象,通过编写代码訪问数据库 Connection 对象 ODBC数据源 使用ADO Data 控件高速创建数据库连接 有三种连接方法 ...
- 详解VB中连接access数据库的几种方法
在VB中,连接ACCESS数据库的方法主要有下面三种 使用ADO对象,通过编写代码访问数据库 Connection 对象 ODBC数据源 使用ADO Data 控件快速创建数据库连接 有三种连接方法 ...
- java web项目中连接mysql数据库,javaweb之eclipse工程连接mysql数据库
javaweb之eclipse工程连接mysql数据库 准备工作: 1.在mysql官网下载mysqlconnection的jar包 输入网址:mysql.com-点击DOWNLOADS--下拉选择M ...
- odbc mysql 配置文件_ODBC连接主流数据库的配置方法
准备工作 安装ODBC基本组件: # yum install -y unixODBC unixODBC-devel 安装完成后可用odbcinst -j命令查看安装配置文件所在的位置,有两个比较常用的 ...
- C 连接ACCESS数据库代码实例
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 今天一个 ...
- 条码打印软件如何连接Access数据库
中琅条码打印软件中连接Access数据库,不同于中琅条码打印软件连接MySQL或者SQL Server数据库需要提供数据库的访问权限(服务器,账号,密码等).连接Access数据库和Excel.TXT ...
- vb adodb mysql_VB6实现连接Access数据库的ADODB代码实现方法
本文实例讲述了使用ADODB.Connection连接access数据库的方法,驱动类型版本为:Microsoft.Jet.OLEDB.4.0.在VB的数据库操作中,连接数据库是第一步,也是最基本的, ...
最新文章
- Python 如何查看内存地址
- LR为什么要先离散化
- SAP MM 事务代码MI31之思考之续集
- java 不包含 字母和数字_Java String - 查看字符串是否仅包含数字而不包含字母
- 2020-11-19(栈帧)
- PHP7添加opcache.so模块
- vant.dialog.alert什么方法让他隐藏_今天才发现,美工刀上面还隐藏着一个小机关,厉害又实用,学学吧...
- mysql获取当前时间的订单_mysql获取当前时间,及其相关操作
- 1.3Python快速入门
- HDU 1166 敌兵布阵 【线段树-点修改--计算区间和】
- 回溯法——设计一个算法在1、2、3... 9(顺序不能变)数字之间插入+ 或 - 或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性和全排列
- GNUstep 运行gui程序
- 【原生】封装一个判断数据类型的函数的方法,准确判断一个数据的类型
- 基于Spring开发的一个BIO-RPC框架(对小白很友好)
- cortex a7 a53_镜头测试:蔡司红T28/2.8+索尼微单A7实拍北京景山公园
- Pytorch:VGG16
- 怎么用html把字写到图片上,用HTML代码在图片上写字
- Python IO编程详解
- 支付宝公众服务接口和微信公众平台接口的区别
- 腾讯云双十一活动读解
热门文章
- python乐观锁代码实现_Django的乐观锁与悲观锁实现
- j计算机专业英语题库,计算机专业英语单词习题
- .Net Framework4.5中Asp.net mvc使用Singal R轮训实现导入进度条功能
- c#學習筆記--Visual Studio 使用
- 用xargs处理带空格文件名
- 从Java里调用R – JRI的设置方法
- 【堪萨斯州立大学】电子和计算机工程系智能能源研究室、硬件安全实验室招募博士,提供多个全额奖学金机会...
- IoU-aware的目标检测,显著提高定位精度
- 百万奖金!天池发起广东工业制造创新大赛
- 利用OpenCV抠图技术实现影视中“隐身”特效