如何通过数据源、连接池连接数据库?

本文介绍如何利用Tomcat配置文件和Java代码实现数据库连接池,包括配置context.xml、编写BaseDao类的方法以通过连接池获取数据库连接,以及创建JSP页面进行测试。

 

如何通过连接池连接数据库?(优点:数据源创建很多connection对象放在连接池中,需要时直接拿走使用)

1 将tomcate服务器的配置文件context.xml中添加 一组代码,内含 driver,url,username,password 
2 在公共类 baseDao.java 中 编写 公共连接方法:getConnection()
3 启动Tomcat服务器,在webroot目录下创建aa.jsp,编写测试代码

 

1、配置Tomcat的conf/context.xml(将下面代码复制粘贴到context.xml中的context标签中)

<Resource name="jdbc/news" 
              auth="Container"  type="javax.sql.DataSource"  maxActive="100" 
              maxIdle="30" maxWait="10000" username="root"  password="root" 
              driverClassName="com.mysql.jdbc.Driver" 

              url="jdbc:mysql://127.0.0.1:3306/kgcnews"/>

 

2  BaseDao.java

package com.kgc.dao;

import java.sql.Connection;
import java.sql.DriverManager;
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;

import com.kgc.util.ConfigManager;

public class BaseDao {
	
	Connection cnt=null;
	PreparedStatement ps=null;
	ResultSet rs=null;
	
	//通过连接池实现连接
	public boolean getConnection(){
		try {
			//初始化上下文
			Context ct=new InitialContext();
			//获取与逻辑名相关联的数据源对象
			DataSource ds=(DataSource) ct.lookup("java:comp/env/jdbc/news");
			cnt=ds.getConnection();
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return true;
		
	}

       //直接连接数据库
    	public boolean getConnection(){
		try {
			
			Class.forName("com.mysql.jdbc.Driver");
			
			String url="jdbc:mysql://localhost:3306/kgcnews";
			cnt=DriverManager.getConnection(url, "root", "root");
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	
	//关闭资源
	public boolean closeResource(){
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		if(ps!=null){
			try {
				ps.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		if(cnt!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return true;
		
	}
	
	//增删改
	public int executeUpdate(String sql ,Object [] params){
		int updateRows=0;
		if(this.getConnection()){
			//获得sql语句
			try {
				ps=cnt.prepareStatement(sql);
				//给占位符的赋值
				for(int i=0;i<params.length;i++){
					ps.setObject(i+1,params[i] );
				}
				//执行 增删改,返回影响的行数
				updateRows=ps.executeUpdate();
				
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		return updateRows;
		
	}

	//查询 全部信息 或者指定部分信息
	public ResultSet ExecuteQuery(String sql ,Object [] params){
		if(this.getConnection()){
			try {
				ps=cnt.prepareStatement(sql);
				//给占位符赋值
				for(int i=0;i<params.length;i++){
					ps.setObject(i+1, params[i]);
				}
				// 执行查询,返回值是ResultSet型的
				rs=ps.executeQuery();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return rs;
	}
	
	

}

3    aa.jsp

<%@ page import="com.kgc.dao.NewsDao" %>
<%@ page import="com.kgc.dao.impl.NewsDaoImpl" %>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'aa.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  <%
  	NewsDao  dao=new NewsDaoImpl();
      dao.getAS("%课工场%");
  %>
      </body>
</html>

 


    
 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空非空也

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值