入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

java JDBC 自定义连接池

创建时间:2017-11-23 投稿人: 浏览次数:190

当执行sql语句比较频繁 。每一次执行 连接一次数据库 关闭连接  比较浪费资源。
连接池是来重复使用Connection 提交效率.

文件结构:


文件JDBCTool.java

package jdbc;
import jdbc_u1.MyDataSourse;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class JDBCTool {
    private static Connection conn=null;
    private static PreparedStatement pstmt=null;
    private static ResultSet rs=null;
    private static MyDataSourse dataSourse=new MyDataSourse();
    public static void  testinsert(String uname,String upassword)
    {
        try {
            //conn=JDBCUtils.getConnection();
            conn=dataSourse.getConnection();
            String sql = "insert into db.users values(null,?,?)";
            pstmt=conn.prepareStatement(sql);
            pstmt.setString(1,uname);
            pstmt.setString(2,upassword);
            int row=pstmt.executeUpdate();
            if(row>0)
            {
                System.out.println("注册成功");
            }
            else  System.out.println("注册失败");
        } catch (Exception e) {
            System.out.println("注册失败");
        }
        finally {
            //JDBCUtils.release(conn,pstmt,rs);
            dataSourse.BackConnection(conn);
        }
    }

    public static void testSelect(String uname,String upassword)
    {
        try {
            //conn=JDBCUtils.getConnection();
            conn=dataSourse.getConnection();
            String sql="select * from db.users where uname=? and upassword=? ";
            pstmt=conn.prepareStatement(sql);
            pstmt.setString(1,uname);
            pstmt.setString(2,upassword);
            rs=pstmt.executeQuery();
            if(rs.next())
            {
                System.out.println("验证成功");
            }
            else System.out.println("验证失败");
        } catch (Exception e) {
            System.out.println("验证失败");
        }
        finally {
            //JDBCUtils.release(conn,pstmt,rs);
            dataSourse.BackConnection(conn);
        }
    }

    public static void testUpdate(String oldname,String oldpassword,String newname,String newpassword)
    {
        try {
           // conn=JDBCUtils.getConnection();
            conn=dataSourse.getConnection();
            String sql = "update db.users set uname=?,upassword=? where uname=? and upassword=?";
            pstmt=conn.prepareStatement(sql);
            pstmt.setString(1,newname);
            pstmt.setString(2,newpassword);
            pstmt.setString(3,oldname);
            pstmt.setString(4,oldpassword);
            int row=pstmt.executeUpdate();
            if(row>0)
            {
                System.out.println("修改成功");
            }
            else
                System.out.println("修改失败");
        } catch (Exception e) {
            System.out.println("修改失败");
        }
        finally {
            //JDBCUtils.release(conn,pstmt,rs);
            dataSourse.BackConnection(conn);
        }
    }

    public static void delete(String uname,String upassword)
    {
        try {
            //conn=JDBCUtils.getConnection();
            conn=dataSourse.getConnection();
            String sql = "delete from db.users where uname=? and upassword=?";
            pstmt=conn.prepareStatement(sql);
            pstmt.setString(1,uname);
            pstmt.setString(2,upassword);
            int row=pstmt.executeUpdate();
            if(row>0)
            {
                System.out.println("注销成功");
            }
            else System.out.println("注销失败");
        } catch (Exception e) {
            System.out.println("注销失败");
        }
        finally {
            //JDBCUtils.release(conn,pstmt,rs);
            dataSourse.BackConnection(conn);
        }
    }

}

JDBCUtils.java

package jdbc;

import java.sql.*;
import java.util.ResourceBundle;

public class JDBCUtils {
    private static String driver;
    private static String url;
    private static String username;
    private static String password;

    static{
        ResourceBundle bundle= ResourceBundle.getBundle("db");
        driver=bundle.getString("driver");
        url=bundle.getString("url");
        username=bundle.getString("username");
        password=bundle.getString("password");
    }

    public static Connection getConnection()
    {
        Connection conn=null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn= DriverManager.getConnection(url,username,password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }
    public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs)
    {
        if(conn!=null)
        {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(pstmt!=null)
        {
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(rs!=null)
        {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

MyDataSourse.java

package jdbc_u1;

import jdbc.JDBCUtils;

import javax.sql.DataSource;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.LinkedList;
import java.util.logging.Logger;

public class MyDataSourse implements DataSource{
    //创建存储Connection的一个容器
    private static LinkedList<Connection> pool = new LinkedList<Connection>();

    //创建5个连接
    static {
        for(int i=0;i<5;i++)
            pool.add(JDBCUtils.getConnection());
    }

    //从池子里获取一个连接对象
    @Override
    public Connection getConnection() throws SQLException {
        Connection conn=null;
        if(pool.size()==0)
        {
            for(int i=0;i<5;i++)
                pool.add(JDBCUtils.getConnection());
        }
        conn=pool.removeFirst();
        return conn;
    }
    //归还
    public void BackConnection(Connection conn)
    {
        pool.add(conn);
    }

    @Override
    public Connection getConnection(String username, String password) throws SQLException {
        return null;
    }

    @Override
    public PrintWriter getLogWriter() throws SQLException {
        return null;
    }

    @Override
    public void setLogWriter(PrintWriter out) throws SQLException {

    }

    @Override
    public void setLoginTimeout(int seconds) throws SQLException {

    }

    @Override
    public int getLoginTimeout() throws SQLException {
        return 0;
    }

    @Override
    public Logger getParentLogger() throws SQLFeatureNotSupportedException {
        return null;
    }


    @Override
    public <T> T unwrap(Class<T> iface) throws SQLException {
        return null;
    }

    @Override
    public boolean isWrapperFor(Class<?> iface) throws SQLException {
        return false;
    }
}

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306?characterEncoding=utf8
username=root
password=123456

Main.java

import jdbc.JDBCTool;

public class Main {
    public static void main(String[] args){
        JDBCTool.testSelect("abc","uabc");
        JDBCTool.testSelect("woc","absd");
    }
}


阅读更多
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像