JDBC学习总结(五)
取得数据库连接是件耗时间及资源的动作,尽量利用已打开的连接,也就是重复利用取得的Connection实例,是改善数据库连接性能的一个方式,而采用连接池是基本做法。由于取得Connection的方式根据所使用的环境及程序需求而有所不同,直接在程序代码中固定(规范)取得Connection的方式并不是明智之举。在Java EE的环境中,将取得连接等与数据库来源相关的行为规范在javax.sql.DataSource接口,实际如何取得Connection则由实现接口的对象来负责。
- try{
- Context initContext = new InitialContext();
- Context envContext = (Context)initContext.lookup("java:/comp/env");
- dataSource = (DataSource)envContext.lookup("jdbc/demo");
- }catch(NamingException e){
- ...
- }
在创建Context对象的过程中会收集环境的相关数据,之后根据JNDI名称向“jdbc/demo”向JNDI服务器查找DataSource实例并返回。在这个程序片段中,不会知道实际的资源配置、实体机器位置、环境架构等信息,应用程序不会与这些信息相依。如果只是利用JNDI查找某些资源对象,则上面的这个程序片段就是对JNDI需要知道的东西了,其他的细节就交给服务器管理人员做好相关设置,让jdbc/demo可以对应取得DataSource实例即可。
- package com.yyq.bean;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.naming.NamingException;
- import javax.sql.DataSource;
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- /**
- * Created by gao on 16-4-15.
- */
- public class DatabaseBean {
- private DataSource dataSource;
- public DatabaseBean(DataSource dataSource) {
- this.dataSource = dataSource;
- }
- public DatabaseBean() {
- try {
- Context initContext = new InitialContext();
- Context envContext = (Context) initContext.lookup("java:/comp/env");
- //查找jdbc/demo对应的DataSource对象
- dataSource = (DataSource) envContext.lookup("jdbc/demo");
- } catch (NamingException ex) {
- Logger.getLogger(DatabaseBean.class.getName()).log(Level.SEVERE, null, ex);
- throw new RuntimeException(ex);
- }
- }
- public boolean isConnectedOK() {
- boolean ok = false;
- Connection conn = null;
- try {
- //通过DataSource对象取得连接
- conn = dataSource.getConnection();
- if (!conn.isClosed()) {
- ok = true;
- }
- } catch (SQLException ex) {
- Logger.getLogger(DatabaseBean.class.getName()).log(Level.SEVERE, null, ex);
- throw new RuntimeException(ex);
- } finally {
- if (conn != null) {
- try {
- conn.close();
- } catch (SQLException ex) {
- Logger.getLogger(DatabaseBean.class.getName()).log(Level.SEVERE, null, ex);
- }
- }
- }
- return ok;
- }
- }
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
- version="3.0">
- <resource-ref>
- <res-ref-name>jdbc/demo</res-ref-name>
- <res-type>javax.sql.DataSource</res-type>
- <res-auth>Container</res-auth>
- <res-sharing-scope>Shareable</res-sharing-scope>
- </resource-ref>
- </web-app>
4)编写简单的JSP来使用DatabaseBean,检测数据库是否连接成功。
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
- <jsp:useBean id = "db" class="com.yyq.bean.DatabaseBean"/>
- <!DOCTYRE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <title>测试数据库连接</title>
- </head>
- <body>
- <c:choose>
- <c:when test="${db.connectedOK}">连接成功!</c:when>
- <c:otherwise>连接失败!</c:otherwise>
- </c:choose>
- </body>
- </html>
- <?xml version='1.0' encoding='utf-8'?>
- <Context>
- <WatchedResource>WEB-INF/web.xml</WatchedResource>
- <Resource name="jdbc/demo" auth="Container"
- type = "javax.sql.DataSource" maxActive = "20" maxIdle="10"
- maxWait="10000" username="root" password="123456"
- driverClassName = "com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/demo?">
- </Resource>
- </Context>
name: 表示指定的jndi名称
auth :表示认证方式,一般为Container
type :表示数据源床型,使用标准的javax.sql.DataSource
maxActive: 表示连接池当中最大的数据库连接
maxIdle :表示最大的空闲连接数
maxWait :当池的数据库连接已经被占用的时候,最大等待时间
username :表示数据库用户名
password :表示数据库用户的密码
driverClassName: 表示JDBC DRIVER
url :表示数据库URL地址
JDBC学习总结(五)的更多相关文章
- jdbc学习总结
jdbc学习总结: 一.简介: jdbc,直译为java连接数据库.实际为java为很好的操作数据库而提供的一套接口,接口的实现(即驱动)由各个数据库厂商提供. 二.知识要点: 连接5要素,3 ...
- spring 学习(五):spring 事务
spring 学习(五):spring 事务 事务概要 一个数据库事务通常包含了一个序列的对数据库的读/写操作.它的存在包含有以下两个目的: 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同 ...
- 从零开始学习jQuery (五) 事件与事件对象
本系列文章导航 从零开始学习jQuery (五) 事件与事件对象 一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解 ...
- 前端学习 第五弹: CSS (一)
前端学习 第五弹: CSS (一) 创建css: <link rel="stylesheet" type="text/css" href="my ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition
Android Animation学习(五) ApiDemos解析:容器布局动画 LayoutTransition Property animation系统还提供了对ViewGroup中的View改变 ...
- 六、Android学习第五天——Handler的使用(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 六.Android学习第五天——Handler的使用 注意:有很多功能是不 ...
- JDBC学习笔记(2)——Statement和ResultSet
Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement ...
- JDBC学习笔记(1)——JDBC概述
JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数 ...
随机推荐
- IIS WMI Provider
section contains information about the classes that are implemented by the IIS WMI provider in the M ...
- startDiscovery() and startLeScan().
You have to start a scan for Classic Bluetooth devices with startDiscovery() and a scan for Bluetoot ...
- Team Homework #3
我们组采访了以下几组学长学姐.因为隐私问题我们不会写出他们的个人信息. 1:平均每周所花时间:10:平均写的代码总数:2000:最有用的部分:锻炼团队合作精神:最没用的部分:写博客:改进:完全不需要博 ...
- 团队项目之Sprint计划会议
一.我们团队在4月15日进行了冲刺计划会议,会议过程大致如下: 1.总结目前的工作进展,再一次确定所做项目的方向: 2.将之前的调查问卷的结果进行统计,做了需求分析,大致了解了用户的想法: 3.根据初 ...
- Android应用市场提交入口
应用市场是整个移动生态系统的核心,然而对于中国用户来说,Google Play应用商店却因为种种原因,在中国一直无法长期稳定的运作,又加上Android系统的开源特性,从而在中国造就出大量的第三方应用 ...
- Careercup - Facebook面试题 - 5188884744896512
2014-05-02 07:18 题目链接 原题: boolean isBST(const Node* node) { // return true iff the tree with root 'n ...
- 【笔记】UML核心元素
1.参与者 定义:在系统之外与系统交互的某人或某物. 特点:1.可以非人:2.与系统直接交互:3.主动发出动作并获得反馈:4.涉众(stakerholder)的代表 具有两个版型: 1.业务主角(bu ...
- 【C# 反射泛型】
C# 反射泛型 摘自:http://www.itwis.com/html/net/c/20110411/10175.html C#泛型反射和普通反射的区别,泛型反射和普通反射的区别就是泛型参数的处理上 ...
- uva 10160
一开始写的代码加上各种剪枝后还是超时, 然后看了一下状态压缩后过了,两个代码的具体思想是一样的,状态压缩后可以大大提升性能 #include <cstdio> #include <c ...
- jquery div层级选择器
div id="modelName" class="modelName"> <!-- 车系的层 --> <div name=" ...