All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.zengtengpeng.jdbc.utils.JDBCUtils Maven / Gradle / Ivy

There is a newer version: 2.1.6
Show newest version
package com.zengtengpeng.jdbc.utils;

import com.zengtengpeng.autoCode.config.AutoCodeConfig;
import com.zengtengpeng.autoCode.utils.MyStringUtils;
import com.zengtengpeng.jdbc.bean.Bean;
import com.zengtengpeng.jdbc.bean.BeanColumn;
import com.zengtengpeng.autoCode.config.DatasourceConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * jdbc工具类
 */
public class JDBCUtils {


   static Logger logger = LoggerFactory.getLogger(JDBCUtils.class);
    /**
     * 获取jdbc连接
     * @param datasourceConfig
     * @return
     */
    public static Connection getConnection(DatasourceConfig datasourceConfig){
        try {
            Class.forName(datasourceConfig.getDriverClassName());
            return DriverManager.getConnection(datasourceConfig.getUrl(),datasourceConfig.getUsername(),datasourceConfig.getPassword());
        }catch (Exception e) {
           throw new RuntimeException("获取jdbc连接异常",e);
        }
    }

    /**
     * 获取table相关数据
     * @return
     */
    public static Bean saxTable(Connection connection, AutoCodeConfig autoCodeConfig){
        Statement statement =null;
        ResultSet rs = null;
        Bean bean = autoCodeConfig.getBean();
        DatasourceConfig datasourceConfig = autoCodeConfig.getDatasourceConfig();
        try {
            DatabaseMetaData metaData = connection.getMetaData();
            String tableName = bean.getDataName();
            ResultSet tables = metaData.getTables(datasourceConfig.getName(), "%", tableName, new String[]{"TABLE"});
            if(tables.next()){

                //获取表名
                statement = connection.createStatement();
                rs = statement.executeQuery("SHOW CREATE TABLE " + tableName);
                if (rs != null && rs.next()) {
                    String createDDL = rs.getString(2);
                    String comment = parse(createDDL);
                    logger.info("解析表-{}->{}",tableName,comment);
                    if(MyStringUtils.isEmpty(comment)){
                        comment=tableName;
                    }
                    bean.setTableRemarks(comment);
                }

                //获取主键

                ResultSet primaryKeys = metaData.getPrimaryKeys(datasourceConfig.getName(), "%", tableName);
                Map pk=new HashMap<>();
                if(primaryKeys.next()){
                    String column_name = primaryKeys.getString("COLUMN_NAME");
                    pk.put(column_name,column_name);
                }

                //获取列名
                List beans=new ArrayList<>();
                List keys=new ArrayList<>();

                rs = metaData.getColumns(datasourceConfig.getName(),"%", tableName,"%");
                while(rs.next()) {
                    BeanColumn beanColumn=new BeanColumn();
                    beanColumn.setJdbcName(rs.getString("COLUMN_NAME"));
                    beanColumn.setJdbcType(rs.getString("DATA_TYPE"));
                    if(!MyStringUtils.isEmpty(rs.getString("IS_NULLABLE")) && rs.getString("IS_NULLABLE").equalsIgnoreCase("yes")){
                        beanColumn.setNullable(true);
                    }
                    beanColumn.setLength(rs.getString("COLUMN_SIZE"));
                    if(!MyStringUtils.isEmpty(rs.getString("IS_AUTOINCREMENT")) && rs.getString("IS_AUTOINCREMENT").equalsIgnoreCase("yes")){
                        beanColumn.setIdentity(true);
                    }
                    String remarks = rs.getString("REMARKS");
                    if(MyStringUtils.isEmpty(remarks)){
                        beanColumn.setRemarks(beanColumn.getJdbcName());
                    }else {
                        beanColumn.setRemarks(remarks);
                    }
                    beanColumn.setDefaultValue(rs.getString("COLUMN_DEF"));

                    if(pk.get(beanColumn.getJdbcName())!=null){
                        beanColumn.setKey(true);
                        keys.add(beanColumn);
                    }
                    beans.add(beanColumn);
                }
                bean.setPrimaryKey(keys);
                bean.setAllColumns(beans);
                bean.setParentPack(autoCodeConfig.getGlobalConfig().getParentPack());
                return  bean;
            }else {
                logger.info("数据库表不存在->{}", tableName);
                return null;
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }finally {
            if(statement!=null){
                try {
                    statement.close();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }

            if(rs!=null){
                try {
                    rs.close();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }

        }

    }

    /**
     * 返回表注释信息
     *
     * @param all
     * @return
     */

    private static String parse(String all) {
        String comment = null;
        int index = all.indexOf("COMMENT='");
        if (index < 0) {
            return "";
        }
        comment = all.substring(index + 9);
        comment = comment.substring(0, comment.length() - 1);
        return comment;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy