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

com.github.xiaoyuge5201.config.DataSourceClient Maven / Gradle / Ivy

The newest version!
package com.github.xiaoyuge5201.config;

import com.github.xiaoyuge5201.entity.ColumnEntity;
import com.github.xiaoyuge5201.util.ConnectUtil;
import com.google.common.base.CaseFormat;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * 数据源工具类
 *
 * @author yugb
 */
public class DataSourceClient implements Serializable {


    private DatasourceProperties properties;

    private DataSourceClient(DatasourceProperties properties) {
        this.properties = properties;
    }

    /**
     * 重写一个方法,使用桥接模式;使用readResolve方法防止单例模式被序列化破坏
     *
     * @return 实体对象
     */
    public DatasourceProperties getProperties() {
        return properties;
    }

    private DataSourceClient setProperties(DatasourceProperties properties) {
        this.properties = properties;
        return this;
    }

    /**
     * 获取对象
     *
     * @param properties 属性
     * @return 对象
     */
    public synchronized static DataSourceClient build(DatasourceProperties properties) {
        return new DataSourceClient(properties);
    }

    /**
     * 查询所有的表结构信息
     *
     * @return 表结构列表
     */
    public List findAllTables() {
        Connection connection = ConnectUtil.getConnection(properties.getDriverClassName(), properties.getHost(), properties.getUsername(), properties.getPassword(), properties.getDatabase());
        if (connection != null) {
            List list = new ArrayList();
            PreparedStatement stmt = null;
            ResultSet rs = null;
            try {
                String query = ConnectUtil.getTablesInfoBySqlAndType(properties.getDriverClassName(), properties.getDatabase());
                stmt = connection.prepareStatement(query);
                rs = stmt.executeQuery();
                while (rs.next()) {
                    list.add(rs.getString("TABLE_NAME"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (rs != null) {
                        rs.close();
                    }
                    if (stmt != null) {
                        stmt.close();
                    }
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return list;
        }
        return null;
    }

    /**
     * 查詢數據庫表的字段信息
     *
     * @param table 数据表
     * @return 表字段列表
     */
    public List queryTableFields(String table) {
        Connection connection = ConnectUtil.getConnection(properties.getDriverClassName(), properties.getHost(), properties.getUsername(), properties.getPassword(), properties.getDatabase());
        if (connection != null) {
            List list = new ArrayList<>(16);
            PreparedStatement stmt = null;
            ResultSet rs = null;
            try {
                String query = ConnectUtil.queryColumnSql(properties.getDriverClassName(), properties.getDatabase(), table);
                stmt = connection.prepareStatement(query);
                rs = stmt.executeQuery();
                while (rs.next()) {
                    ColumnEntity columnEntity = new ColumnEntity();
                    String columnName = rs.getString("COLUMN_NAME");
                    columnEntity.setColumnName(columnName);
                    columnEntity.setDataType(rs.getString("DATA_TYPE"));
                    columnEntity.setCharacterMaximunLength(rs.getString("CHARACTER_MAXIMUM_LENGTH"));
                    columnEntity.setIsNullable(rs.getString("IS_NULLABLE"));
                    columnEntity.setColumnDefault(rs.getString("COLUMN_DEFAULT"));
                    columnEntity.setColumnComment(rs.getString("COLUMN_COMMENT"));
                    columnEntity.setTableName(rs.getString("TABLE_NAME"));
                    columnEntity.setJavaName(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, columnName));
                    columnEntity.setTableComment(rs.getString("TABLE_COMMENT"));
                    list.add(columnEntity);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (rs != null) {
                        rs.close();
                    }
                    if (stmt != null) {
                        stmt.close();
                    }
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return list;
        }
        return null;
    }

    /**
     * 查询对应库下所有字段 信息
     *
     * @return 结果
     */
    public List findColumnByDriverAndDatabase() {
        Connection connection = ConnectUtil.getConnection(properties.getDriverClassName(), properties.getHost(), properties.getUsername(), properties.getPassword(), properties.getDatabase());
        if (connection != null) {
            List list = new ArrayList<>(16);
            PreparedStatement stmt = null;
            ResultSet rs = null;
            try {
                String query = ConnectUtil.getSqlByType(properties.getDriverClassName(), properties.getDatabase());
                stmt = connection.prepareStatement(query);
                rs = stmt.executeQuery();
                while (rs.next()) {
                    ColumnEntity columnEntity = new ColumnEntity();
                    columnEntity.setColumnName(rs.getString("COLUMN_NAME"));
                    columnEntity.setDataType(rs.getString("DATA_TYPE"));
                    columnEntity.setCharacterMaximunLength(rs.getString("CHARACTER_MAXIMUM_LENGTH"));
                    columnEntity.setIsNullable(rs.getString("IS_NULLABLE"));
                    columnEntity.setColumnDefault(rs.getString("COLUMN_DEFAULT"));
                    columnEntity.setColumnComment(rs.getString("COLUMN_COMMENT"));
                    columnEntity.setTableName(rs.getString("TABLE_NAME"));
                    columnEntity.setTableComment(rs.getString("TABLE_COMMENT"));
                    list.add(columnEntity);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (rs != null) {
                        rs.close();
                    }
                    if (stmt != null) {
                        stmt.close();
                    }
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return list;
        }
        return null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy