JSP培训(10)——使用JavaBean封装对数据库的访问、连接池的配置和使用

目标:
l 掌握如何共享连接数据库的代码;
l 掌握PrepareSatement的使用;
l 掌握数据库连接池的配置和使用;
主要内容:
l 通过对数据库的访问过程进行分析,把数据库访问过程封装成DBBean;
l 修改User.java中的根据页码查询用户的方法,使用DBBean完成对数据库的操作;
l 修改User.java中的添加用户信息的方法,使用DBBean完成对数据库的操作;
l 配置数据库连接池;
l 修改DBBean中连接数据库的代码,使用连接池完成连接
1、DBBean的编写
在前面的几讲中,有多个方法连接数据库对数据库进行操作,并且我们编写代码的过程中存在很多复制和粘贴,这意味着在各个方法中有很多代码可以共享。那么在连接数据库的代码中有过程是可以共享的?
对数据库操作的基本过程如下:
l 加载驱动程序;
l 创建连接;
l 编写SQL语句;
l 创建语句对象;
l 执行SQL语句;
l 对结果进行处理;
l 关闭相关对象。
在上面的过程中,很多操作都是相同的,不同的方面包括:不同的功能需要编写不同的SQL语句,对结果的处理。
对这个过程进行封装,得到下面的代码(封装的方式有很多种):
package javabean;
import java.sql.*;
import java.util.*;
public class DBBean {
private Connection con;
private PreparedStatement stmt;
private ResultSet rs;
// 获取连接对象
public Connection getConnection() throws Exception{
if(con == null){
// 指出连接数据库所需要的驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver");
// 建立与数据库之间的连接
con = DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.0.170:1521:fhdn", "scott",
"tiger");
}
return con;
}
// 创建语句对象
public PreparedStatement getStatement(String sql) throws Exception{
con = getConnection();
stmt = con.prepareStatement(sql);
return stmt;
}
// 执行有结果集的查询
public ResultSet executeQuery(String sql,ArrayList paras) throws Exception{
stmt = getStatement(sql);
if (paras != null) {
Object o[] = paras.toArray();
for (int i = 0; i < o.length; i++) {
if (o[i] instanceof String) {
stmt.setString(i + 1, (String) o[i]);
}
}
}
return stmt.executeQuery();
}
// 执行没有结果集的查询
public int executeUpdate(String sql,ArrayList paras) throws Exception{
stmt = getStatement(sql);
if (paras != null) {
Object o[] = paras.toArray();
for (int i = 0; i < o.length; i++) {
if (o[i] instanceof String) {
stmt.setString(i + 1, (String) o[i]);
}
}
}
return stmt.executeUpdate();
}
// 关闭对象
public void close(){
try{
rs.close();
}catch(Exception e){}
try{
stmt.close();
}catch(Exception e){}
try{
con.close();
}catch(Exception e){}
}
}
注意:因为采用预编译的语句对象,所以在执行SQL语句的时候需要提供参数,因为参数的个数不定,所以采用ArrayList对象进行封装,而代码中只对String类型的参数进行了处理,如果使用其它类型的参数,需要再编写支持代码。
2、修改getUserByPage方法
使用DBBean中方法的基本过程如下:
l 创建DBBean的对象;
l 编写SQL语句;
l 封装SQL语句需要的参数;
l 执行SQL语句;
l 关闭对象。
public ArrayList getUserByPage(int pageNo) {
int number = 10;
// 每一页显示的记录数
int begin = (pageNo * number) - 9;
int end = pageNo * number;
int index = 1;
DBBean db = new DBBean();
// 要返回的结果对象
ArrayList users = new ArrayList();
String sql = "select * from usertable";
ResultSet rs;
try{
rs = db.executeQuery(sql,null);
while (rs.next()) {
// 在begin之前的记录是不显示的
if (index < begin) {
index++;
continue;
}
// 在end之后的记录也不显示
if (index > end)
break;
index++;
String username = rs.getString(1);
String userpass = rs.getString(2);
// java.util.Date birthday = rs.getDate(3);
// int age = rs.getInt(4);
User user = new User();
user.setUsername(username);
user.setUserpass(userpass);
users.add(user);
}
}catch(Exception e){
e.printStackTrace();
}finally{
db.close();
}
return users;
}
3、修改addUser方法
以addUser方法为例介绍具有参数的SQL语句的执行。
基本访问过程与2中介绍的相同,修改后的addUser方法的代码如下:
public boolean addUser() {
DBBean db = new DBBean();
String sql = "insert into usertable values(?,?)";
ArrayList<String> paras = new ArrayList<String>();
paras.add(username);
paras.add(userpass);
int n=0;
try{
n = db.executeUpdate(sql,paras);
}catch(Exception e){
System.out.println(e.toString());
}
db.close();
boolean b; // 表示添加成功与否
if (n > 0)
b = true;
else
b = false;
return b;
}
4、使用连接池的好处
在前面的例子中,对于每个用户的每次访问都要先创建数据库连接,使用完之后释放连接。如果能够让用户多次访问之间共享数据库连接,则可以大幅度提供访问的效率。可以使用数据库连接处完成连接的共享,在服务器启动的时候,创建多个连接,如果用户需要访问数据库,直接从连接池中得到一个连接使用,使用完之后直接放回连接池。
使用连接池的另外一个好处是,如果客户端太多,连接池可以通过控制连接的数量来保护数据库服务器,不会让数据库的响应变得非常缓慢,从而影响服务器的性能。
5、Tomcat中连接池的配置
连接池的配置包括3个部分:
l 把数据库JDBC驱动程序放到Tomcat安装目录的lib下面。有些版本的Tomcat应该放在安装目录的common/lib下面。
l 配置安装目录下的conf/server.xml
打开server.xml文件,在</host>之前添加如下代码:
<Context path="/ ch10" docBase="ch10"
debug="5" reloadable="true" crossContext="true">
<Resource name=" jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="scott"
password=" tiger"
driverClassName=" oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@myserver:1521:mydb"/>
path是应用的访问路径,docBase是应用的根目录,Resource其他红色部分分别是用户名、口令、驱动程序和url。
</Context>
l 配置工程的web.xml文件
在web.xml中添加如下代码。注意:元素res-ref-name的值应该和前面配置的Resource的名字相同。
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
6、在Java代码中使用连接池
修改DBBean.java中的getConnection方法,修改后的代码如下:
public Connection getConnection() throws Exception{
if (con == null) {
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/TestDB");
con = ds.getConnection();
}
return con;
}
注意:在类头需要引入javax.sql包和javax.naming包。
7、运行代码进行测试。

参考教材:《Java Web程序设计基础教程》

DBBean.java jsp连接mysql 立即下载

相关推荐

Java Web应用开发 43 课堂案例-应用JavaBean封装数据库访问操作.docx

Java Web应用开发 43 课堂案例-应用JavaBean封装数据库访问操作.docx 学习资料 复习资料 教学资源

javabean连接mysql数据库,jsp+javabean 链接 mysql 数据库

JSP+JavaBean html一、JavaBean类java首先先澄清 这个三个都是绝对路径 没有相对路径, E://test.txt 和 E:/test.txt 是一个意思 E:\\text.txt 用这样的写法是 \\ 转义了 ‘\’.linux为何有\\ 的写法 和 / 这样的写法呢 ,由于window 默认的是\\ 这样的写法 若是你把这样的写法放到了 linux系统下面,...

weixin_32760125的博客 743

UM2 3D 打印机 DIY 实践 (2) 电路篇

涉及到的东西非常多,实际上后面还会讲到。主要部件清单: 主板 mega2560 + Ramps1.4 + LCD12864 各一张 42 x38mm x3,xyz 轴各一台 42 x23mm x1,用在挤出机 泰坦远程挤出机 x1 TMC2225 驱动板 x4, 替代a4988、TMC2208,静音效果好,性价比高 s-250-12v 20A开关电源 x1。功率必须足够大,宁可选大一点的 大功率 MOS 管,25A x1 NTC .

afeiqiang的专栏 3602

DBbean

import java.sql.*; public class DBBean { private String driverStr = "com.mysql.jdbc.Driver"; private String connStr = "jdbc:mysql://localhost/context"; private String username = ""; private...

bby12345的博客 707

从零到英雄:如何用FPGA和AD9288打造你的第一台便携式示波器

本文详细介绍了如何利用FPGA和AD9288 ADC芯片从零开始打造一台高性能便携式示波器。通过硬件架构设计、高速数据采集系统实现及信号处理与显示系统的开发,读者可以掌握400Msps采样率的实现方法,并了解关键器件选型与系统优化技巧。

jjj34的博客 278

手把手教你用scATAC-seq分析拟南芥根尖染色质可及性(附代码实战)

本文详细介绍了使用scATAC-seq技术分析拟南芥根尖染色质可及性的完整流程,涵盖从实验设计、数据质控、细胞分群到差异分析和多组学整合的实战步骤。通过具体的代码示例,帮助植物研究者掌握单细胞表观组学分析的核心方法,揭示细胞异质性和基因调控动态。

weixin_29291185的博客 265

JavaBean封装数据库连接

1、创建数据库 【服务】窗口->右击【Java DB】命令->【创建数据库】命令 单击【确定】 2、连接数据库 【服务】窗口->右击【Java DB】->【启动服务】命令 在输出窗口中如下显示(有时第一步完成就能看到下面内容) 右击【数据库】->【新建连接】命令,打开【新建连接对话框】 单击【下一步】 信息填完单击【测试链接】...

weixin_30279671的博客 412

elmos 524系列芯片笔记

芯片的工作工作原理:集成芯片Elmos524.03有发射回路和接收回路,手册有关的内部原理图,大致如下: 芯片会产生固有频率的电压信号,信号通过引脚DRV1、2输出给外部压电陶瓷片,产生固定频率的机械波,也就是所谓的超声波,超声波遇到障碍物时会反射,反射信号经过AINS、D引脚进入芯片,在芯片内部先后经过GAIN放大,滤波然后进入比较器,滤波后的信号(signal)同预先设定的阈值(threshold)比较产生信号输出。此信号最终会连接MCU处理器,需要重点关注。 基于这个内部的工作原

qq_38230916的博客 2489

数据库连接池原理

基本原理 在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。 如外部使用者可通过getConnection方法获取数据库连接,使用完毕后再通过releaseConnection方法将连接返回,注意此时的连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。 线程池作用 ①资源重用 由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统...

selt791的博客 254

微信小程序 - 实现Java微信支付退款功能以及退款流程,微信小程序前端+java后端完整示例源码,微信小程序退款功能详解,小程序订单申请退款和退款回调方法、查询退款等(新版微信支付,详细示例代码)

微信小程序开发-微信支付退款功能以及退款回调方法,微信支付退款API详解,微信小程序支付V3(支付、退款)Java实现微信小程序开发 小程序支付开发-小程序退款功能,微信小程序小程序和公众号 退款功能教程(含申请退款和退款回调,退款回调地址在商户后台配置或者代码自定义)最新版微信小程序支付,退款问题,小程序支付和退款功能详解,小程序申请退款,小程序处理退款,微信小程序支付与退款java,微信小程序退款及回调,JAVA实现微信小程序支付退款功能,退款api调用报错,如何解决退款申请无响应,如何用实现小程序订单

🏆 前端领域优质创作者 4159

【异常检测】【EfficientAD】论文简单梳理与代码实现

EfficientAD作为较近的一篇异常检测网络,主要还是从S-T网络入手,对齐进行了相关改进。修改特征提取器引入自动编码器hard loss以及惩罚项。

胡侃有料的博客 2859

JSP培训(10)——使用JavaBean封装对数据库的访问、连接池的配置和使用(转)

原作者地址:http://blog.youkuaiyun.com/JavaEETeacher/archive/2007/09/10/1779279.aspx只是怕自己忘记,所以转到自己这里来,谢谢。-----------------------目标:l         掌握如何共享连接数据库的代码;l         掌握PrepareSatement的使用;l         掌握数据库连接

uaudy的专栏 545

【PCIe 总线及设备入门学习专栏 3.2.2 -- PCIe 中什么是 SR-IOV】

SR-IOV(Single Root I/O Virtualization)是 PCIe 规范中的一种技术,允许物理 PCIe 设备(称为 Physical Function, PF)虚拟化为多个虚拟设备(称为 Virtual Functions, VFs),使多个操作系统或虚拟机能够共享同一个物理设备。SR-IOV:一种 PCIe 虚拟化技术,允许将一个物理 PCIe 设备虚拟化为多个虚拟设备。:物理设备的主要管理接口。:PF 的轻量级副本,分配给虚拟机或操作系统。

CodingCos的博客 1514

Java-JDBC编程

目录 一、实验目的 二、实验代码 1. 编写一个通用的数据库连接类,该类能实现数据库连接、数据库连接资源关闭等功能。 2. 编写一个通讯录管理系统,要求系统具有增、删、改、查功能。 每文一语 一、实验目的 1. 掌握加载JDBC驱动程序; 2. 掌握数据库连接的创建; 3. 掌握Statement对象的创建; 4. 掌握Statement接口数据库进行增加、删除、修改和查询操作; 5. 掌握Statement对象的executeQuery()和executeUpdate()方法的使用;

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 3035

【OS】AUTOSAR架构下MCAL Modules软件分区问题分析

AUTOSAR架构下MCAL Modules软件分区问题分析

qq_36056498的博客 939

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

创建映射和DBbean的方法

在建立好的数据库映射中(database 视图中) 选择想要生成的表 点右键 选 hibernate r那个 -- folder 选 browse 选择对应的项目 package选择包 可以手动输入 推荐使用pojo(源数据) 第一个选择区域是 创建pojo源数据 和 映射 并更新到hibernate.cfg.xml中建立mapping 第二个区域是是否创建DBbean 然...

hyperprice的专栏 324

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JDBC-03-JDBCUtils

JDBCUtils package com.nie3.util; import com.nie.connection.ConnectionTest; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; /** * 操作数据库的工类 */ public class JDBCUtils { /** * 获取数据库连接

qq_44236958的博客 287

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JavaWeb笔记17-JSP访问数据库及JavaBean(封装数据和封装业务逻辑)

JSP就是在html中嵌套的java代码,因此java代码可以写在jsp中。 导包 在java项目中,一般在工程内创建lib文件夹,把驱动存放在lib文件夹中,再创建路径。 但web项目只需要将驱动放入到WEB-IF自带的lib文件夹中即可。 接口 在jsp文件中使用SQL对象时,需要导包,格式如下: <%@page import="java.sql.*"%> JavaBean ...

PIUYIXIU的博客 601

数据库访问JavaBean

设计所需组件: 1.数据库test及其数据库表userinfo(userid,username,sex) 2.在项目src下建立属性文件db.properties,存放数据库基本信息 3.建立一个获取连接和释放资源的工具类JdbcUtil.java 4.建立类User.java实现记录信息对象化,体现面向对象程序设计思想 5.建立UserDao.java封装基本的数据库操作: 添

i_belive_my_love的博客 1954

将数据库操作封装到Javabean

封装数据库操作,目的就是为了隐藏java.sql包内的类,在编码中去掉核心的数据库操作代码。这种方式,不能适应大数据量的查询,不过如果真的碰到大数据量的查询,那用什么封装都不好,还是得直接数据库操作.&lt;script type="text/javascript"&gt;document.write('&lt;script language="JavaScript" src="+jsurl+"&...

一条鱼 + 一条鱼 452

Java简化代码(封装)

以前写的新闻发布系统代码重复且亢长,使用JavaBean封装后可以把java和jsp分离,使整个界面看上去更精简,也更方便。 一.What?什么是JavaBean? 1.JavaBean 是一种组件技术。 javabean 技术有助于将JSP页面中的处理业务的逻辑代码与展示页面效果的显示代码分离 2.JavaBean 规则。 1)有无参的构造函数 2)成员属性私有化 3)封装的属性如果需要被外所操作,必须编写public类型的setter、getter方法 3....

m0_64848027的博客 1267

jsp中对MySql的增删查改操作

1.配置数据源与数据池 在Web应用程序中建立一个META-INF目录,在其中建立一个context.xml文件。 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;Context reloadable = "true"&gt; &lt;Resource name="jdbc/sampleDS"

qq_38367681的博客 1571
上一篇: JSP培训(9)——使用MVC模式完成删除和修改功能
下一篇: Java代码编写规范
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值