java数据池,java 数据池连接教程

JNDI——(Java Naming and Directory Interface,Java 命名和目录接口)

概念:是一组在Java 应用中访问命名和目录服务的API。

步骤:

1.拷贝数据库驱动jar包到tomcat/lib

2.修改Tomcat/conf/context.xml文件

...//原有配置

type="javax.sql.DataSource" maxActive="100" maxIdle="30"

maxWait="10000" username="sa" password="sa"

driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"

url="jdbc:sqlserver://localhost:1433;DatabaseName=restrant">

注: 的属性

属性

说明

name

指定 Resource 的 JNDI 名字

auth

指定管理 Resource 的 Manager,它有两个可选值:Container 和 Application 。Container 表示由容器来创建 Rsource,Application 表示由Web应用来创建和管理的 Resource

type

指定 Resource 所属的Java 类名

maxActive

指定数据库连接池中处于活动状态的数据库连接的最大数目,取值为 0,表示不受限制

maxIdle

指定数据库连接池中处于空闲状态的数据库连接的最大数目,取值为 0,表示不受限制

maxWait

指定数据库连接池中的数据库连接处于空闲状态的最长时间(以毫秒为单位),超过这一时间将会抛出异常。取值为-1,表示可以无限制等待

username

指定连接数据库的用户名

password

指定连接数据库的口令

driverClassName

指定连接库的 JDBC 驱动程序

url

指定连接数据库的URL

3.修改工程中的web.xml

Restrant DataSource

jdbc/restrant

javax.sql.DataSource

Container

...//其他配置

注:

的属性

description

对象引用资源的说明

res-ref-name

指定所引用资源的 JNDI 名,与 元素中的name属性对应

res-type

指定所引用资源的类名字,与元素中的 type 属性对应

res-auth

指定管理所引用资源的Manager,与元素中的 auth 属性对应

4.创建新的数据库连接管理类:

public abstract class ConnectionManagerJNDI {

// 数据源的JNDI名称

private static final String JNDI = "jdbc/restrant";

// 查找数据源的前缀

private static final String PREFIX = "java:comp/env/";

/** 利用JNDI查找数据源,获得数据库连接方法 */

public static Connection getConnection() {

Connection conn = null;

try {

// 初始化JNDI

Context ctx = new InitialContext();

// 从JNDI中查找一个名字为jdbc/restrant的资源,并向下转型为DataSource类型

// 注意1.名称要和配置文件中完全一致2.一定要写对前缀

DataSource dataSource = (DataSource) ctx.lookup(PREFIX + JNDI);

// 从数据源中获得数据库连接实例

conn = dataSource.getConnection();

} catch (NamingException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

return conn;

}

}

5.在项目中通过ConnectionManagerJNDI获得数据库连接

示例:

命名空间package com.qingniao.y2t69.zhanghui.common;

数据连接接口类——DAO.java

package com.qingniao.y2t69.zhanghui.common;

import javax.servlet.jsp.jstl.sql.Result;

public interface DAO {

// 查询方法

Result executeQuery();

// 增加、修改、删除方法

boolean executeUpdate();

}

获得Connection类——ConnectionManager.java

package com.qingniao.y2t69.zhanghui.common;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;

public abstract class ConnectionManagerJNDI {

private static final String JNDI = "jdbc/restrant";

private static final String PREFIX = "java:comp/env/";

public static Connection getConnection() {

Connection conn = null;

try {

Context ctx = new InitialContext();

DataSource dataSource = (DataSource) ctx.lookup(PREFIX + JNDI);

conn = dataSource.getConnection();

} catch (NamingException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

return conn;

}

// 关闭连接

public static void closeAll(Connection con, PreparedStatement pstmt,

Statement stmt, ResultSet rs) {

if (rs != null) {

try {

rs.close();

rs = null;

} catch (SQLException e) {

System.out.println("关闭ResultSet错误!" + e);

}

}

if (pstmt != null) {

try {

pstmt.close();

pstmt = null;

} catch (SQLException e) {

System.out.println("关闭PreparedStatement错误!" + e);

}

}

if (stmt != null) {

try {

stmt.close();

stmt = null;

} catch (SQLException e) {

System.out.println("关闭Statement错误!" + e);

}

}

try {

if (con != null && con.isClosed() == false) {

con.close();

con = null;

}

} catch (SQLException e) {

System.out.println("关闭Connection错误!" + e);

}

}

}

数据库连接实现基础类——BaseDAO.java

package com.qingniao.y2t69.zhanghui.common;

import java.sql.*;

import java.util.*;

import javax.servlet.jsp.jstl.sql.*;

public abstract class BaseDAO implements DAO {

protected PreparedStatement pstmt = null;

protected Statement stmt = null;

protected Result result = null;

protected ResultSet rs = null;

protected Connection con = null;

protected boolean flag = false;

// 定义参数集合属性

private List values;

public void setValues(List values) {

this.values = values;

}

// 定义SQL语句属性

private String sqlValue;

public void setSqlValue(String sqlValue) {

this.sqlValue = sqlValue;

}

// 获得连接

protected Connection getConnection() {

return ConnectionManager.getConnection();

}

// 关闭连接

protected void closeAll(Connection con, PreparedStatement pstmt,

Statement stmt, ResultSet rs) {

ConnectionManager.closeAll(con, pstmt, stmt, rs);

}

// 实现查询

public Result executeQuery() {

try {

con = getConnection();

if (values != null && values.size() > 0) {

pstmt = con.prepareStatement(sqlValue);

setValues(pstmt, values);

rs = pstmt.executeQuery();

} else {

stmt = con.createStatement();

rs = stmt.executeQuery(sqlValue);

}

result = ResultSupport.toResult(rs);

} catch (SQLException e) {

System.out.println("执行executeQuery()错误!" + e);

} finally {

this.closeAll(con, pstmt, stmt, rs);

}

return result;

}

// 执行增加、删除、修改

public boolean executeUpdate() {

flag = false;

int num = 0;

try {

con = getConnection();

if (values != null && values.size() > 0) {

pstmt = con.prepareStatement(sqlValue);

setValues(pstmt, values);

num = pstmt.executeUpdate();

} else {

stmt = con.createStatement();

num = stmt.executeUpdate(sqlValue);

}

if (num > 0) {

flag = true;

}

} catch (SQLException e) {

System.out.println("执行executeUpdate()错误!" + e);

} finally {

this.closeAll(con, pstmt, stmt, rs);

}

return flag;

}

// 参数赋值方法

private void setValues(PreparedStatement pstmt, List values) {

try {

for (int i = 0; i < values.size(); i++) {

Object v = values.get(i);

pstmt.setObject(i + 1, v);

}

} catch (SQLException e) {

System.out.println("执行setValues错误!" + e);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值