jdbc数据库连接操作

JdbcController:

package com.sdkj.demo.controller;

import com.sdkj.demo.entity.ConnectInfo;
import com.sdkj.demo.entity.Student;
import com.sdkj.demo.utils.JDBCQueryUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;
import java.util.Map;

@Controller
public class JdbcController {

    @PostMapping("/test")
    @ResponseBody
    public String startCron(@RequestBody(required = false) Map<String,String> map){
        ConnectInfo connectInfo = new ConnectInfo();
        connectInfo.setDriverClassName("com.mysql.cj.jdbc.Driver");
        connectInfo.setUrl("jdbc:mysql://xxxx:3306/platform_admin_server");
        connectInfo.setUser("root");
        connectInfo.setPassword("xxxx");

        String sql = "select user_id userId,user_name userName,nick_name nickName from sys_user";

        JDBCQueryUtils jDBCQueryUtils =new JDBCQueryUtils();
        List<Student> studentList = jDBCQueryUtils.queryList(connectInfo,sql, Student.class);

        for (Student student : studentList) {
            System.out.println(student);
        }
     return "";
    }

}

ConnectInfo:

package com.sdkj.demo.entity;

public class ConnectInfo {

    private String driverClassName;

    private String url;

    private String user;

    private String password;

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

JDBCQueryUtils:

package com.sdkj.demo.utils;

import com.sdkj.demo.entity.ConnectInfo;
import org.apache.commons.beanutils.PropertyUtils;

import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 通用的增删改查
 */
public class JDBCQueryUtils {

    //3. 适用于任何表的通用增删改
    public int update(ConnectInfo connectInfo, String sql, Object ... args){
        Connection conn = null;
        PreparedStatement ps = null;
        int row = 0;
        try {
            //1. 获取连接
            conn = JDBCUtils.getConnection(connectInfo);

            //2. 获取 PreparedStatement,用于发送 SQL
            ps = conn.prepareStatement(sql);

            //3. 填充占位符(根据可变参数确定占位符的个数)
            for (int i = 0; i < args.length; i++) {
                ps.setObject(i+1, args[i]);//注意:SQL中的索引从1开始
            }

            //4. 执行 SQL
            row = ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //5. 关闭连接
            JDBCUtils.close(conn, ps);
        }

        return row;
    }

    public <T> List<T> queryList(ConnectInfo connectInfo, String sql, Class<T> clazz, Object ... args){
        List<T> list = new ArrayList<>();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            //1. 获取连接
            conn = JDBCUtils.getConnection(connectInfo);

            //2. 获取 PreparedStatement,用于发送 SQL
            ps = conn.prepareStatement(sql);

            //3. 填充占位符
            for (int i = 0; i < args.length; i++) {
                ps.setObject(i+1, args[i]);
            }

            //4. 执行 SQL, 获取 ResultSet 结果集
            rs = ps.executeQuery();

            //5. 获取当前结果集的元数据 ResultSetMetaData
            ResultSetMetaData rsmd = rs.getMetaData();

            //6. 获取结果集的列数
            int columnCount = rsmd.getColumnCount();

            //7. 获取结果集中的数据并封装进对象
            while(rs.next()){
                T t = clazz.newInstance();
                for (int i = 0; i < columnCount; i++) {
                    //7.1获取结果集的列名(别名)
                    String columnName = rsmd.getColumnLabel(i + 1);

                    //7.2根据列名(别名)获取结果集列值
                    Object columnValue = rs.getObject(columnName);

                    //7.3利用反射为对象属性设置值,开源组织提供的工具类完成
                    PropertyUtils.setProperty(t, columnName, columnValue);
                }

                list.add(t);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //8. 关闭连接
            JDBCUtils.close(conn, ps, rs);
        }

        return list;
    }

    public <T> T query(ConnectInfo connectInfo,String sql, Class<T> clazz, Object ... args){
        T t = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            //1. 获取连接
            conn = JDBCUtils.getConnection(connectInfo);

            //2. 获取 PreparedStatement,用于发送 SQL
            ps = conn.prepareStatement(sql);

            //3. 填充占位符
            for (int i = 0; i < args.length; i++) {
                ps.setObject(i+1, args[i]);
            }

            //4. 执行 SQL,获取 ResultSet
            rs = ps.executeQuery();

            //5. 获取结果集的元数据
            ResultSetMetaData rsmd = rs.getMetaData();

            //6. 获取结果集的列数
            int columnCount = rsmd.getColumnCount();

            //7. 获取结果集中的数据
            if(rs.next()){
                t = clazz.newInstance();

                for (int i = 0; i < columnCount; i++) {
                    //8. 获取结果集列别名(列名)
                    String columnName = rsmd.getColumnLabel(i + 1);

                    //9. 获取结果集中对应列值
                    Object columnValue = rs.getObject(columnName);

                    //10. 利用反射为属性设置值
                    Field field = clazz.getDeclaredField(columnName); //注意:结果集的列名(别名)必须与属性名保持一致!!!!
                    field.setAccessible(true);//忽略访问权限
                    field.set(t, columnValue);
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //7. 关闭连接
            JDBCUtils.close(conn, ps, rs);
        }

        return t;
    }

}

JDBCUtils:

package com.sdkj.demo.utils;

import com.sdkj.demo.entity.ConnectInfo;

import java.sql.*;

public class JDBCUtils {

    /**
     * 获取连接
     * @return
     * @throws Exception
     */
    public static Connection getConnection(ConnectInfo connectInfo) throws Exception {

        //1. 加载驱动
        Class.forName(connectInfo.getDriverClassName());

        //2. 获取连接
        return DriverManager.getConnection(connectInfo.getUrl(), connectInfo.getUser(), connectInfo.getPassword());
    }

    /**
     * 关闭连接
     * @param conn
     * @param ps
     */
    public static void close(Connection conn, PreparedStatement ps, ResultSet rs){
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(ps != null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 关闭连接
     * @param conn
     * @param ps
     */
    public static void close(Connection conn, PreparedStatement ps){
        if(ps != null){
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

pom:

        <!-- Apache工具组件 -->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.4</version>
        </dependency>
        <!-- Mysql Connector -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

猜你喜欢

转载自blog.csdn.net/u013008898/article/details/121316522