JDBC 连接数据库,包含连接池

Java数据库连接方式及工具类实现
该博客介绍了Java中几种数据库连接方式。包括不使用连接池的Jdbc方式,以及Dbcp、C3p0、Jndi连接池方式。详细给出了每种方式的工具类代码和配置文件内容,并提供了插入数据的测试代码,帮助开发者掌握不同数据库连接的实现。

1.不使用连接池方式(Jdbc)

1.1 工具类(JdbcUtil.java)

package com.jdbc.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtil {
    
    private static String driver;
    private static String url;
    private static String username;
    private static String password;
    static {
        try {
            Properties props = new Properties();
            InputStream is = JdbcUtil.class.getResourceAsStream("/jdbc.properties");
            props.load(is);
            driver = props.getProperty("driver");
            url = props.getProperty("url");
            username = props.getProperty("username");
            password = props.getProperty("password");
            is.close();
        } catch (IOException e) {
            throw new ExceptionInInitializerError("获取数据库配置文件信息失败");
        }
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            throw new ExceptionInInitializerError("加载驱动失败");
        }
    }
    public static Connection getConnection(){
        try {
            Connection conn = DriverManager.getConnection(url,username,password);
            return conn;
        } catch (Exception e) {
            throw new ExceptionInInitializerError("连接数据库的url或用户名密码错误");
        }
    }
    public static void release(ResultSet rs,PreparedStatement ps,Connection conn){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
        if(ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            ps = null;
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
    public static void main(String[] args) {
        // 以增加数据作为测试
        Connection conn = null;
        PreparedStatement ps = null;
        int result = 0;
        try {
            conn = JdbcUtil.getConnection();
            String sql = "insert into student(StudentNo,StudentName) values(1028,'袁华')";
            ps = conn.prepareStatement(sql);
            result = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally{
            JdbcUtil.release(null, ps, conn);
        }
        if(result>0){
            System.out.println("插入成功");
        }else{
            System.out.println("插入失败");
        }
    
    }
}

1.2 配置文件(jdbc.properties)
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/myschool
username=root
password=123456

 

2.Dbcp

2.1 工具类(DbcpUtil.java)

package com.jdbc.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSourceFactory;
/*
 * DBCP数据源的使用
 */
public class DbcpUtil {
    static DataSource ds = null;
    static {
            // try     shift+alt+z
            try {
                Properties props = new Properties();
                InputStream is = DbcpUtil.class.getResourceAsStream("/dbcp.properties");
                props.load(is);
                // DBCP数据源
                ds = BasicDataSourceFactory.createDataSource(props);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        
    }
    public static Connection getConnection(){
        try {
            return ds.getConnection();

        } catch (SQLException e) {
            throw new RuntimeException();
        }
    }
    public static void release(Connection conn){
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) throws SQLException {
        // 测试
        Connection conn = getConnection();
        String sql = "insert into student(StudentNo,StudentName,GradeId,Email) values('1209','Jingjing',3,'jingjing@163.com')";
        PreparedStatement ps = conn.prepareStatement(sql);
        int result = ps.executeUpdate();
        if(result>0){
            System.out.println("插入成功");
        }
    }
}

1.2 配置文件(dbcp.properties)

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/myschool
username=root
password=123456
initialSize=10
maxIdle=30
minIdle=3

 

3.C3p0

3.1 工具类(C3p0Util.java)

package com.jdbc.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;
/*
 * C3p0数据源的使用
 */
public class C3p0Util {
    static ComboPooledDataSource ds = null;
    static {
        ds = new ComboPooledDataSource("jdbc-c3p0");
    }
    public static Connection getConnection(){
        try {
            return ds.getConnection();

        } catch (SQLException e) {
            throw new RuntimeException();
        }
    }
    public static void release(ResultSet rs,PreparedStatement ps,Connection conn){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
        if(ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            ps = null;
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
    public static void main(String[] args) throws SQLException {
        // 测试
        Connection conn = getConnection();
        String sql = "insert into student(StudentNo,StudentName,GradeId,Email) values('1027','fdafd',3,'fdfdaf@163.com')";
        PreparedStatement ps = conn.prepareStatement(sql);
        int result = ps.executeUpdate();
        if(result>0){
            System.out.println("插入成功");
        }
    }
}


3.2 配置文件(c3p0-config.properties)

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>  
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/myschool</property>  
        <property name="user">root</property>  
        <property name="password">123456</property> 
        <property name="initialPoolSize">10</property>  
        <property name="maxPoolSize">20</property>  
        <property name="minPoolSize">5</property>
    </default-config>
    
    <named-config name="jdbc-c3p0">
        <property name="driverClass">com.mysql.jdbc.Driver</property>  
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/myschool</property>  
        <property name="user">root</property>  
        <property name="password">123456</property> 
        <property name="initialPoolSize">10</property>  
        <property name="maxPoolSize">20</property>  
        <property name="minPoolSize">5</property>
    </named-config>
</c3p0-config>

4.Jndi(依赖于服务器)

4.1 工具类(JndiUtil.java)package com.jdbc.util;
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;
/*
 * jdbc数据源连接
 */
public class JndiUtil {
    static DataSource ds= null;

    static {
        try {
            Context initCtx = new InitialContext();
            Context envCtx  = (Context)initCtx.lookup("java:comp/env");
            ds = (DataSource)envCtx .lookup("mysql/jdbc");    
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection(){
        try {
            return ds.getConnection();

        } catch (SQLException e) {
            throw new RuntimeException();
        }
    }
    public static void release(ResultSet rs,PreparedStatement ps,Connection conn){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
        if(ps!=null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            ps = null;
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
    
    //要用到tomcat故放在jsp页面进行测试,开启tomcat,访问localhost:8080/jdbc/jndi.jsp进行测试
//    public static void main(String[] args) throws SQLException {
        //测试
//        Connection conn = JndiUtil.getConnection();
//        String sql = "insert into student(StudentNo,StudentName,GradeId,Email) values('1028','jndi',3,'jndif@163.com')";
//        PreparedStatement ps = conn.prepareStatement(sql);
//        int result = ps.executeUpdate();
//        if(result>0){
//            System.out.println("插入成功");
//        }
//    }
}

 

4.2 配置文件(context.xml)

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="mysql/jdbc" 
            auth="Container"
            type="javax.sql.DataSource"
            username="root"
            password="123456"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost:3306/myschool"
            maxActive="8"
            maxIdle="4"/>
</Context>

4.3 jndi.jsp(当然也可用servlet)

<%@page import="java.sql.PreparedStatement"%>
<%@page import="com.jdbc.util.JndiUtil"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>这个页面为测试JNDI连接池的</title>

  </head>
  
  <body>
    <%
    // 这个页面为测试JNDI连接池的
    Connection conn = JndiUtil.getConnection();
    String sql = "insert into student(StudentNo,StudentName,GradeId,Email) values('1032','哈哈',4,'hehef@163.com')";
    PreparedStatement ps = conn.prepareStatement(sql);
    int result = ps.executeUpdate();
    if(result>0){
        out.println("插入成功");
    }else {
        out.println("插入失败");
    }
    JndiUtil.release(null, ps, conn);
    %>
  </body>
</html>

转载于:https://www.cnblogs.com/JAYIT/p/9301083.html

多角色体系 支持管理员、商家、消费者三种角色,权限分级管控: 管理员:负责平台整体配置、用户审核、数据监控等全局操作。 商家:管理店铺信息、发布商品、处理订单、回复评价等。 消费者:浏览商品、加入购物车、下单支付、评价商品等。 实现用户注册(手机号 / 邮箱验证)、登录(支持密码 / 验证码 / 第三方登录)、个人信息管理(头像、收货地址、密码修改)。 权限精细化控制 商家仅能管理自家店铺及商品,消费者仅能查看和购买商品,管理员拥有全平台数据访问权限。 二、商品管理功能 商品信息维护 商家可发布商品:填写名称、分类(如服饰、电子产品)、子类别(如手机、笔记本)、规格(尺寸、颜色、型号)、价格、库存、详情描述(图文)、物流信息(运费、发货地)等。 支持商品上下架、库存调整、信息编辑,系统自动记录商品状态变更日志。 商品分类与搜索 按多级分类展示商品(如 “数码产品→手机→智能手机”),支持自定义分类体系。 提供智能搜索功能:按关键词(名称、品牌)搜索,支持模糊匹配和搜索联想;结合用户浏览历史对搜索结果排序(优先展示高相关度商品)。 商品推荐 基于用户浏览、收藏、购买记录,推荐相似商品(如 “浏览过该商品的用户还买了…”)。 首页展示热门商品(销量 TOP10)、新品上架、限时折扣等推荐列表。 三、订单与交易管理 购物车与下单 消费者可将商品加入购物车,支持修改数量、选择规格、移除商品,系统自动计算总价(含运费、折扣)。 下单流程:确认收货地址→选择支付方式(在线支付、货到付款)→提交订单→系统生成唯一订单号。 订单处理流程 订单状态跟踪:待支付→已支付→商家发货→物流运输→消费者收货→订单完成,各状态变更实时通知用户。 商家端功能:查看新订单提醒、确认发货(填写物流单号)、处理退款申请(需审核理由)。 消费者端功能:查看订单详情、追踪物流、申请退款 / 退货、确认收货。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值