zoukankan      html  css  js  c++  java
  • java-jdbc封装连接数据库工具

    在进行数据库连接时,我们往往进行的是数据库的连接,关闭操作,执行sql语句书写在Dao层中操作

    现对数据库操作进行封装,通过动态参数进行传递对象,

    通过自建泛型实现返回类的接收,现程序如下:

    /************************************************************   
    Copyright (C), 1988-1999, Huawei Tech. Co., Ltd.   
    FileName:JDBCUtil.java 
      
    Author:   Light     
    Version :   version 1.0       
    Date:       2018/7/12
    Description:      jdbc链接数据库的封装// 模块描述         
    Version:         通过模块化实现jdbc连接数据库操作,减少开发代码关于数据库操作的编写量// 版本信息 
      
    Function List:     // 主要函数及其功能     
    1.getConnection 进行数据库的链接
    2.close 进行数据库的关闭
    3.executeUpdate 执行数据的增删改
    4.executeQuery执行数据的查询
     History: 
      // 历史修改记录 
          
        <author>  <time>   <version >   <desc>       
            David    96/10/12     1.0     build this moudle   
    
    ***********************************************************/ 
    
    public class JDBCUtil {
        //链接地址,设置编码可用且为utf-8
        public static String URL="jdbc:mysql://192.168.80.131:3306/db1?useUnicode=true&characterEncoding=utf8";
        //数据库用户名
        public static String USER="root";
        //数据库密码
        public static String PWD="123456";
        
        /*
        *进行数据库的链接
        */
        public static Connection getConnection(){
            
            Connection con=null;
            try {
                //加载驱动
                Class.forName("com.mysql.jdbc.Driver");
                //创建链接
                con=DriverManager.getConnection(URL, USER, PWD);
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //返回连接
            return con;
        }
        
        /*
        *数据库关闭
        */
        public static void Close(Connection con,PreparedStatement pstmt,ResultSet rs){
            try {
                //判断是否被操作
                if(rs!=null)
                    rs.close();
                if(pstmt!=null)
                    pstmt.close();
                if(con!=null)
                    con.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        /*
        *创建数据库执行操作,返回受影响的行数
        *@param String sql
        *@param Object params
        *@return int result
        */
        public static int executeUpdate(String sql,Object... params){
            //创建链接
            Connection con=getConnection();
            PreparedStatement pstmt=null;
            int result=0;
            try {
                //预编译sql语句,防止sql注入
                pstmt=con.prepareStatement(sql);
                //传递参数,如果参数存在
                if(params!=null){
                    //进行循环传参
                    for(int i=0;i<params.length;i++){
                        pstmt.setObject(i+1, params[i]);
                    }
                }
                //执行sql语句,返回受影响行数
                result=pstmt.executeUpdate();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                Close(con,pstmt,null);
            }
            return result;
        }
        /*
        *进行数据的查询,通过自建泛型RowMap,进行数据类型的定义
        *@param String sql
        *@param RowMap T
        *@param Object params
        *@return list<T>
        */
        public static <T> List<T> executeQuery(String sql,RowMap<T> rowMap,Object... params){
            //创建泛型List
            List<T> list=new ArrayList<>();
            //创建链接
            Connection con=getConnection();
            PreparedStatement pstmt=null;
            ResultSet rs=null;
            try {
                //绑定sql语句
                pstmt=con.prepareStatement(sql);
                //循环穿参
                if(params!=null){
                    for(int i=0;i<params.length;i++){
                        pstmt.setObject(i+1, params[i]);
                    }
                }
                //执行语句,用结果集接收
                rs=pstmt.executeQuery();
                while(rs.next()){
                    //利用自建泛型实现数组的添加
                    T t=rowMap.rowMapping(rs);
                    list.add(t);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                Close(con,pstmt,rs);
            }
            return list;
        }
        
        //使用示例函数
        public static int update(){
            return executeUpdate("insert into student(name,age,sex) values(?,?,?)","姓名",12,"");
      }
    }

    自定义自建泛型

    import java.sql.ResultSet;
    //自建泛型,实现rowMappping返回T类型
    public interface RowMap<T> {
        public T rowMapping(ResultSet rs);
    }
  • 相关阅读:
    day35作业
    进程的初识
    day34作业
    python中的文件
    python字典概述
    python中的深拷贝与浅拷贝
    python的元组和列表使用之一
    Python基本数据类型
    python的编码
    windows中安装python
  • 原文地址:https://www.cnblogs.com/suifengye/p/9302425.html
Copyright © 2011-2022 走看看