- 浏览: 80267 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
一辈子的咲子推:
其实很多学生考试不及格未必就是不学习,太多学生把大学几年时间全 ...
真的不想监考 -
jackroomage:
看错了,你写的没有问题。sorry!!!
Java Web实践专题——访问路径问题 -
jackroomage:
<a href="./../bb/b_a.js ...
Java Web实践专题——访问路径问题
目标:
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程序设计基础教程》
发表评论
-
网页之间共享值
2007-03-19 13:49 457Web应用是由大量的网页组成的,运行的基本原理是:用户通过客 ... -
Java Web实践专题——Eclipse中CVS的使用
2007-03-19 14:50 605CVS概述 主要作用是管理代码的版本,尤其是多人协同开发的时 ... -
Eclipse中Web应用的开发
2007-03-30 09:35 510Eclipse中Web应用的开发 应用服务器:tomcat ... -
MVC模式在Java Web中的应用
2007-04-21 22:06 401流行的Java Web应用框架基本上都实现了MVC模型,下面分 ... -
Tomcat中连接池的配置和使用
2007-04-27 13:19 470对于大型网站来说,信 ... -
WebLogic中连接池错误Failed to Generate Wrapper Class的解决方案
2007-05-01 13:25 549很多人在使用Weblogic配置连接池之后,会碰到这样一个 ... -
Sun Java System Appliation Server中连接池的配置
2007-05-01 14:16 5051、准备驱动程序 把 ... -
Java Web中的分页显示——通过界面实现
2007-05-04 23:11 675在界面完成分页控制, ... -
Java Web中的分页显示——在模型中实现
2007-05-04 23:25 467在模型中实现分页显示,主要是在把查询的结果集转换成对象集合的 ... -
NetBeans中的几个快捷方式
2007-06-15 12:38 511几个比较常用的方便代码编写的功能如下: 1、引入用到的类 ... -
最好的Java Web开发的书应该是什么样子?
2007-06-20 14:50 690关于Java Web开发的技术非常多,JSP、Servet、J ... -
JSP培训(1)——概述
2007-08-21 08:35 523本文是JSP培训的笔记,是培训的第一次——概述。 (参考 ... -
JSP培训(2)——运行原理、文档结构、简单输入输出
2007-08-23 09:16 607目标: l 掌握Web应用的文档结构; l 掌握JSP ... -
JSP培训(3)——客户端验证、常用输出方式、JSTL基本用法
2007-08-30 09:49 518目标: l 掌握客户端验证的基本过程; l 掌握 ... -
JSP培训(4)——实例:登录功能、jsp:forward标签、jsp:include标签、include指令、EL、c:if
2007-08-30 09:55 772目标: l 进一步体会JSP应用; l 掌握表达 ... -
JSP培训(5)——使用JavaBean完成业务逻辑
2007-08-31 16:42 504目标: l 掌握什么是JavaBean; l 掌握如何 ... -
JSP培训(6)——使用Servlet作为控制器实现MVC模式
2007-09-04 13:38 621目标: l 初步理解MVC ... -
JSP培训(7)——使用JDBC完成动态验证、采用MVC完成数据查询
2007-09-04 13:43 541目标: l 掌握JDBC链接数据库的基本过程; l 掌 ... -
JSP培训(8)——添加功能和分页显示
2007-09-04 13:46 583学习目标: l 进一步掌握MVC设计模式; l 掌握添 ... -
JSP连接Microsoft SQL Server出错:Error establishing socket解决方法
2007-09-06 14:09 503安装SQL Server的补丁即可。 安装的时候需要注意:第 ...
相关推荐
-运用dbutil.jar包一键封装表单数据到bean对象中,简化对数据库增、删、改、查的代码 -运用fileupload.jar包上传文件 -运用poi.jar包解析EXCEL文件 -AJAX异步更新 -运用json-lib.jar包将数据转化为JSON格式 -...
2.servlet用作控制器,使用javabean技术对数据进行封装。 3.数据库采用MySQL,利用c3p0连接池进行数据库的连接,分别建users table与books table ; 4.系统具备分页功能,且用户可以进行模糊书目查询。
项目: 新闻信息发布系统 Java Web项目,2015年4月应Java Web课程要求而设计的一个新闻信息系统。 主要使用JSP+Servlet+JavaBean+JDBC+DBCP技术实现;本人封装了JDBC,增加DBCP数据库连接池,从而可以控制事务。
13.2 数据库连接池 13.3 commons dbutils组件 13.4 小结 第14章 ajax技术jquary框架的经典应用 14.1 jquery框架的简单应用 14.2 利用jquery框架实现的经典运用 14.3 实现仿google suggest功能...
我们掌握了数据库及其应用技术、数据库原理、计算机网络技术等课程,对数据库的设计、应用、维护及局域网的组成有了深刻的认识与一定的动手实践能力,考取了信息处理、程序设计、数据库技术等国家IT认证。...
据源连接池机制,整个系统完全贯穿JAVA面向对象的概念,全面完整地实现了JAVA的封装性 ,继承性,多态性的三大特征,完全按照J2EE企业级网络应用程序的开发方案设计和开发, 所有的繁重的计算和处理都由服务器端处理...
12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...
据源连接池机制,整个系统完全贯穿JAVA面向对象的概念,全面完整地实现了JAVA的封装性 ,继承性,多态性的三大特征,完全按照J2EE企业级网络应用程序的开发方案设计和开发, 所有的繁重的计算和处理都由服务器端处理...
4.2.1 配置数据库连接池 4.2.2 数据库连接池的应用 4.2 -3实例:用doGet方法处理客户端请求 4.2.4 实例:用doPost方法处理客户端请求 4.2.5 实例:用service方法处理客户端请求 4.2.6 实例:初始化...
据源连接池机制,整个系统完全贯穿JAVA面向对象的概念,全面完整地实现了JAVA的封装性 ,继承性,多态性的三大特征,完全按照J2EE企业级网络应用程序的开发方案设计和开发, 所有的繁重的计算和处理都由服务器端处理...
12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...
12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...
12.4.2 配置数据库连接池 12.4.3 使用JNDI 12.5 使用Hibernate的工具快速生成映射文件和POJO 12.5.1 使用MiddleGen根据数据库产生映射文件 12.5.2 使用hbm2java根据映射文件产生POJO 12.6 整合Struts、Spring和...
4.2.1 配置数据库连接池 4.2.2 数据库连接池的应用 4.2 -3实例:用doGet方法处理客户端请求 4.2.4 实例:用doPost方法处理客户端请求 4.2.5 实例:用service方法处理客户端请求 4.2.6 实例:初始化(init)...
答:1:封装:通过定义类并且给类的属性和方法加上访问控制 2:继承:子类继承父类,子类可以拥有父类中已定义的方法,并且子类可以修改父类中的方法使其更适合特殊需求。 3:多台:不同对象对统一消息作出不同...
据源连接池机制,整个系统完全贯穿JAVA面向对象的概念,全面完整地实现了JAVA的封装性 ,继承性,多态性的三大特征,完全按照J2EE企业级网络应用程序的开发方案设计和开发, 所有的繁重的计算和处理都由服务器端处理...
连接池使用了c3p0。参数可以在c3p0-config.xml中配置。 service:业务层,处理业务 servlet:web层,获取页面数据,请求分发转向。baseServlet作为最基础的servlet,利用反射技术,使得servlet开发方便快捷了许
数据的存储和持久化由HIENATER持久层实现,数据库采用MYSQL,数据源采用数据源连接池机制, 整个系统完全贯穿JAVA面向对象的概念,全面完整地实现了JAVA的封装性,继承性,多态性的三大特征,完全按照J2EE企业级网络...
《Java项目开发全程实录》这一本书从开发背景、需求分析、系统功能分析、数据库分析、数据库建模、网站开发和网站发布或者程序打包与运行,每一过程都进行了详细的介绍。 目 录 第1章 进销存管理系统(Swing+SQL ...