JAVA中完整的JDBC类 - 增删改查

无框架的JDBC连接池,主要方法有:
查询语句:executeQuery(String sql)
查询语句:executeQuery(String sql,Object[] params)
增删改语句:executeUpdate(String sql)
增删改语句:executeUpdate(String sql,Object[] params)

:smile:
文件下载地址:

部分代码预览:

package JQuery.util;

/**使用PreparedStatement使Statement更加安全**/

import java.sql.PreparedStatement;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

public class JDBCUtil
{
    /**数据库链接必要属性:类型、地址、端口、用户名、密码、库名**/
    private static String sql;
    private static String address;
    private static String port;
    private static String username;
    private static String password;
    private static String dbname;
    /**创建唯一属性保存最总url地址**/
    private static String url;
    /**JDBC操作数据库所需对象**/
    private static Connection connection=null;  //链接对象
    private static PreparedStatement stmt=null; //操作数据库的对象
    private static ResultSet rs=null;           //结果保存对象
    /**自身对象确保唯一**/
    private static JDBCUtil jdbcUtil= null;

    private static boolean errSwitch = true;    //是否提示错误信息
    private static boolean infoSwitch = true;   //是否提示常规信息
    private static boolean warningSwitch = true;

    /********************************************************************************/

    public static synchronized JDBCUtil getInitJDBCUtil()
    {
        configureMysql("mysql","127.0.0.1","3306","root","Your Password","jquery");
        configureSetting(true,true,true);
        /**确保JDBCUtil在主方法中不使用new**/
        if(jdbcUtil==null)
        {
            info("新建jdbcUtil单元");
            jdbcUtil = new JDBCUtil();
        }
        return jdbcUtil;
    }

    static
    {
        /**确保驱动不被多次创建**/
        /**加载驱动**/
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch(ClassNotFoundException e)
        {
            err("加载驱动失败,请检查驱动是否地址是否正确");
        }
        finally
        {
            info("加载驱动静态代码块static执行完毕");
        }
    }
    private static void configureSetting(boolean err,boolean info,boolean warning)
    {
        JDBCUtil.errSwitch=err;
        JDBCUtil.infoSwitch=info;
        JDBCUtil.warningSwitch=warning;
    }

    /**配置数据库的链接信息**/
    private static void configureMysql(String sql, String address, String port, String username, String password, String dbname)
    {
        /**这里使用JDBCUtil而不是使用this是因为变量是静态变量,在这个类中具有唯一性**/
        JDBCUtil.sql = sql;
        JDBCUtil.address = address;
        JDBCUtil.port = port;
        JDBCUtil.username = username;
        JDBCUtil.password = password;
        JDBCUtil.dbname = dbname;

        JDBCUtil.url="jdbc:"+JDBCUtil.sql+"://"+JDBCUtil.address+":"+JDBCUtil.port+"/"+JDBCUtil.dbname+"?serverTimezone=GMT&useUnicode=true&characterEncoding=utf-8&useSSL=false";
    }

    public Connection getConnection()
    {
        try
        {
            info("获取数据库连接");
            connection=DriverManager.getConnection(JDBCUtil.url,JDBCUtil.username,JDBCUtil.password);
        }
        catch (SQLException e)
        {
            err("数据库连接失败,检查密码用户名等填写问题");
            e.printStackTrace();
        }
        finally
        {
            info("getConnection连接获取方法执行完毕");
        }
        return connection;
    }

    /********************************************************************************/
    /**执行操作数据库的方法**/
    /********************************************************************************/
    public int executeUpdate(String sql) throws Exception
    {
        int affectedLine=0;//受影响的行数
        /**建立数据库连接**/
        connection = getConnection();
        /**操作数据库对象**/

        stmt=connection.prepareStatement(sql);  //准备执行语句
        affectedLine = stmt.executeUpdate();    //执行语句

        closeAll();
        return affectedLine;
    }

    public int executeUpdate(String sql,Object[] params) throws Exception
    {
        int affectedLine=0;//受影响的行数
        /**建立数据库连接**/
        connection = getConnection();
        /**操作数据库对象**/
        stmt=connection.prepareStatement(sql);  //准备执行语句
        for(int i=0;i<params.length;i++)
        {
            /**用来给执行语句中的?'问号'赋值**/
            stmt.setObject(i+1,params[i]);
        }
        affectedLine = stmt.executeUpdate();    //执行语句
        closeAll();
        return affectedLine;
    }

    /********************************************************************************/
    /**
     * 查询原理:    执行executeQuery->调用executeQueryRS获取结果集
     *          executeQuery方法把结果集分类整理放入顺序表中
     */
    /********************************************************************************/
    private ResultSet executeQueryRS(String sql,Object[] params)
    {
        /**建立数据库连接**/
        connection = getConnection();
        try
        {
            stmt=connection.prepareStatement(sql);  //准备执行语句
            for(int i=0;i<params.length;i++)
            {
                /**用来给执行语句中的?'问号'赋值**/
                stmt.setObject(i+1,params[i]);
            }
            rs=stmt.executeQuery(); //执行语句
        }
        catch (SQLException e)
        {
            err("执行语句错误,请检查语句是否正确");
            e.printStackTrace();
        }
        finally
        {
            info("executeQueryRS原始结果集返回方法执行完毕");
        }
        return rs;
    }

    private ResultSet executeQueryRS(String sql)
    {
        /**建立数据库连接**/
        connection = getConnection();
        try
        {
            stmt=connection.prepareStatement(sql);  //准备执行语句
            rs=stmt.executeQuery(); //执行语句
        }
        catch (SQLException e)
        {
            err("执行语句错误,请检查语句是否正确");
            e.printStackTrace();
        }
        finally
        {
            info("executeQueryRS原始结果集返回方法执行完毕");
        }
        return rs;
    }

    public List<HashMap> executeQuery(String sql)
    {
        info("执行mysql查询方法(不带?号参数)");
        ResultSet tempRS;
        tempRS = executeQueryRS(sql);
        /**ResultSetMetaData结果集原数据,用于获取关于ResultSet列的名和值**/
        ResultSetMetaData rsmd = null;
        int columnCount = 0;
        try
        {
            rsmd=tempRS.getMetaData();          //获取原数据
            columnCount=rsmd.getColumnCount();  //取结果集列数
        }
        catch (SQLException e)
        {
            err("[executeQuery(String sql)]获取结果集数据失败,具体原因请查看日志");
            e.printStackTrace();
        }
        finally
        {
            info("executeQuery查询执行完毕");
        }

        /**新建一个顺序表,每一条记录都作为一个HashMap保存在顺序表里面**/
        List<HashMap> list;
        list = new ArrayList<HashMap>();
        try
        {
            //对结果集进行遍历
            while(tempRS.next())
            {
                /**新建一个HashMap每一条记录都保存在一个HashMap里面**/
                HashMap<String,Object> map;
                map = new HashMap<String,Object>();
                for(int i=1;i<=columnCount;i++)
                {
                    String before;
                    Object after;
                    before = rsmd.getColumnLabel(i);
                    after = rs.getObject(i);
                    map.put(before,after);      //获取列名
                }
                list.add(map);//将HashMap放入顺序表list中
            }
        }
        catch (SQLException e)
        {
            err("[executeQuery(String sql)]结果集遍历失败");
            e.printStackTrace();
        }
        finally
        {
            closeAll();
        }
        return list;    //返回顺序表
    }

    public List<HashMap> executeQuery(String sql,Object[] params)
    {
        info("执行mysql查询方法(带?号参数)");
        ResultSet tempRS;
        tempRS = executeQueryRS(sql,params);
        /**ResultSetMetaData结果集原数据,用于获取关于ResultSet列的名和值**/
        ResultSetMetaData rsmd = null;
        int columnCount = 0;
        try
        {
            rsmd=tempRS.getMetaData();          //获取原数据
            columnCount=rsmd.getColumnCount();  //取结果集列数
        }
        catch (SQLException e)
        {
            err("[executeQuery(String sql,Object[] params)]获取结果集数据失败,具体原因请查看日志");
            e.printStackTrace();
        }
        finally
        {
            info("executeQuery查询执行完毕");
        }
        /**新建一个顺序表,每一条记录都作为一个HashMap保存在顺序表里面**/
        List<HashMap> list;
        list = new ArrayList<HashMap>();

        try
        {
            //对结果集进行遍历
            while(tempRS.next())
            {
                /**新建一个HashMap每一条记录都保存在一个HashMap里面**/
                HashMap<String,Object> map;
                map = new HashMap<String,Object>();
                for(int i=1;i<=columnCount;i++)
                {
                    String before;
                    Object after;
                    before = rsmd.getColumnLabel(i);
                    after = rs.getObject(i);
                    map.put(before,after);      //获取列名
                }
                list.add(map);//将HashMap放入顺序表list中
            }
        }
        catch (SQLException e)
        {
            err("[executeQuery(String sql,Object[] params)]结果集遍历失败");
            e.printStackTrace();
        }
        finally
        {
            closeAll();
        }

        return list;    //返回顺序表
    }

    public void closeAll()
    {
        info("开始关闭基于JDBC的MYSQL数据库操作插件");
        closeRs();
        closeStmt();
        closeConnection();
        info("关闭基于JDBC的MYSQL数据库操作插件完成");
    }

    private void closeRs()
    {
        /**关闭结果集对象**/
        if(rs!=null)
        {
            try
            {
                rs.close();
                info("关闭结果集对象成功");
            }
            catch (SQLException e)
            {
                err("关闭结果集对象失败");
                e.printStackTrace();
            }
            finally
            {
                info("closeRs执行完毕");
            }
        }
    }

    private void closeStmt()
    {
        /**关闭stmt对象**/
        if(stmt != null)
        {
            try
            {
                stmt.close();
                info("关闭stmt对象成功");
            }
            catch (SQLException e)
            {
                err("关闭stmt对象失败");
                e.printStackTrace();
            }
            finally
            {
                info("closeStmt执行完毕");
            }
        }
    }

    private void closeConnection()
    {
        /**关闭connection连接对象**/
        if(connection != null)
        {
            try
            {
                connection.close();
                info("关闭connection对象成功");
            }
            catch (SQLException e)
            {
                err("关闭connection连接对象失败");
                e.printStackTrace();
            }
            finally
            {
                info("closeConnection执行完毕");
            }
        }
    }

    private static void err(Object object)
    {
        if(errSwitch)
        {
            System.err.println("***********************");
            System.err.println("数据库连接模块发生错误:");
            System.err.println(object);
            System.err.println("错误时间:"+new Date());
            System.err.println("***********************");
        }
    }

    private static void info(Object object)
    {
        if(infoSwitch)
        {
            System.out.println("***********************");
            System.out.println("数据库连接模块信息提示:");
            System.out.println(object);
            System.out.println("提示时间:" + new Date());
            System.out.println("***********************");
        }
    }

    private static void warning(Object object)
    {
        if(warningSwitch)
        {
            System.out.println("***********************");
            System.out.println("数据库连接模块告警提示:");
            System.out.println(object);
            System.out.println("告警时间:" + new Date());
            System.out.println("***********************");
        }
    }
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容