自动生成代码工具 数据库工具类

                                                    自动生成代码工具 数据库工具类

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ijwt.element.Constants;

/**
 * @author InJavaWeTrust
 */
public class UtilDB {
	
	private static Connection conn      = null;
	private static Statement st         = null;
	private static ResultSet rs         = null;
	private static DatabaseMetaData dmd = null;
	private static Logger log = LoggerFactory.getLogger(UtilDB.class);
	
	private UtilDB() {}
	
	/**
	 * 连接数据库
	 * @return
	 */
	public static Connection connection() {
		try {
			Class.forName(Constants.DRIVER);
			conn = DriverManager.getConnection(Constants.URL, Constants.USER, Constants.PASSWORD);
		} catch (ClassNotFoundException | SQLException e) {
			log.error(e.getMessage());
		}
		return conn;
	}
	
	/**
	 * 关闭链接
	 * @param rs
	 * @param st
	 * @param conn
	 */
	public static void release(ResultSet rs, Statement st, Connection conn) {
		try {
			if (null != rs) {
				rs.close();
			}
		} catch (Exception e) {
			log.error(e.getMessage());
		}
		try {
			if (null != st) {
				st.close();
			}
		} catch (Exception e) {
			log.error(e.getMessage());
		}
		try {
			if (null != conn) {
				conn.close();
			}
		} catch (Exception e) {
			log.error(e.getMessage());
		}
	}
	
	/**
	 * 根据表名查询表中列注释
	 * @param tableName 表名
	 * @return List<String>
	 */
	public static List<String> getColumnCommentByTableName(String tableName) {
		List<String> columnComments = new ArrayList<>();
		connection();
		try {
			dmd = conn.getMetaData();
			rs = dmd.getColumns(null, dmd.getUserName(), tableName, null);
			while (rs.next()) {
				columnComments.add(rs.getString("REMARKS"));
			}
		} catch (SQLException e) {
			log.error(e.getMessage());
		}
		release(rs, st, conn);
		return columnComments;
	}
	
	/**
	 * 根据表名查询表中列名
	 * @param tableName 表名
	 * @return List<String>
	 */
	public static List<String> getColumnNameByTableName(String tableName) {
		List<String> columnComments = new ArrayList<>();
		connection();
		try {
			dmd = conn.getMetaData();
			rs = dmd.getColumns(null, dmd.getUserName(), tableName, null);
			while (rs.next()) {
				columnComments.add(rs.getString("COLUMN_NAME"));
			}
		} catch (SQLException e) {
			log.error(e.getMessage());
		}
		release(rs, st, conn);
		return columnComments;
	}
	
	/**
	 * 根据表名查询表中列类型
	 * @param tableName 表名
	 * @return List<String>
	 */
	public static List<String> getColumnTypeByTableName(String tableName) {
		List<String> tableNames = new ArrayList<>();
		connection();
		try {
			dmd = conn.getMetaData();
			rs = dmd.getColumns(null, dmd.getUserName(), tableName, null);
			while (rs.next()) {
				tableNames.add(rs.getString("TYPE_NAME"));
			}
		} catch (SQLException e) {
			log.error(e.getMessage());
		}
		release(rs, st, conn);
		return tableNames;
	}
	
	/**
	 * 得到数据库中所有表名
	 * @return List<String>
	 */
	public static List<String> getAllTableName() {
		List<String> tableNames = new ArrayList<>();
		connection();
		try {
			dmd = conn.getMetaData();
			rs = dmd.getTables(null, dmd.getUserName(), null, null);
			while (rs.next()) {
				tableNames.add(rs.getString("TABLE_NAME"));
			}
		} catch (SQLException e) {
			log.error(e.getMessage());
		}
		release(rs, st, conn);
		return tableNames;
	}
	
	/**
	 * 得到数据库表注释
	 * @param tableName 表名
	 * @return 表注释
	 */
	public static String getTableCommentByTableName(String tableName) {
		String comment  = "";
		connection();
		PreparedStatement pstmt = null;
		try {
			String sql = "SHOW TABLE STATUS WHERE NAME = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, tableName);
			rs = pstmt.executeQuery();
			boolean has = rs.next();
			if(has) {
				comment = rs.getString("Comment");
			}
		} catch (SQLException e) {
			log.error(e.getMessage());
		} finally {
			try {
				if (null != pstmt) {
					pstmt.close();
				}
			} catch (SQLException e) {
				log.error(e.getMessage());
			}
		}
		release(rs, st, conn);
		return comment;
	}
	
	public static void main(String[] args) {
		String list = getTableCommentByTableName("dept");
		System.out.println(list);
	}
}

 

博客地址:http://blog.csdn.net/vipbooks 一直以来根据数据库表结构自动生成JavaBean、自动生成MyBaits的Mapper映射配置文件、自动生成数据库设计文档都是一件让人很头痛的事情,既浪费时间又很繁琐,看着几十上百个表的成千上万个字段,真是一件让人痛苦的事情。 我们也想过很多办法解决这个问题,包括用MyEclipse连接数据库生成JavaBean,但多多少少还是会有一些不尽人意的地方,包括表和表字段的comment总是无法生成,而且还会生成很多无用的注释代码,让代码看起来一点都不干净,配置非常繁琐等等问题。 于是一怒之下,自己动手丰衣足食,于是就自己用Swing写了一个基于数据库的自动化生成工具,支持MySQL、Oracle、SQLServce、PostgreSQL四种数据库,支持Window、Linux、MacBook等多个作系统,完美支持JPA注解,可以同时生成Entity和DTO等,可以自动去除表前缀,支持单个和批量生成JavaBean,现在不但成员变量上能生成备注了,而且在Getter和Setter上也能有注释了。更重要的是还能自动生成数据库设计文档和MyBaits的Mapper映射配置文件,如果有多个数据源还能批量生成,使用非常方便。 所有的配置都保存在本地,只要配置过一次,下次使用的时候完全可以秒生成JavaBean、MyBaits的Mapper映射配置文件和数据库设计文档,并且还集成各种实用工具,使得工作效率瞬间爆棚,生产力瞬间爆表! TableGo v5.8.0版更新震撼发布,此次版本更新如下: 1、新增自定义文件功能,可以自己编写模板生成任意代码的文件。 2、新增数据源配置自动生成功能,项目分库分表不用愁,一次搞定所有数据源。 3、公共参数界面新增表别名和是否目录直通的配置。 4、生成Bean界面新增是否生成字段注释和重写equals,hashCode,toString方法的配置。 5、MyBatis配置界面新增根据所有字段条件查询数据的选项。 6、新增TableGo使用说明书。 7、更新数据库驱动版本,新版的驱动可能不支持JDK8以下的版本。 8、修复了大量的Bug并进行了一些优化。
官网:http://www.tablego.cn   博客:https://blog.csdn.net/vipbooks      TableGo v6.0.0 版震撼发布,此次版本更新如下: 1、UI界面大改版,组件大调整,提升界面功能的可扩展性。 2、新增BeautyEye主题,界面更加清新美观,也可以通过配置切换到原生Java主题。 3、新增合并增量更新功能,并能指定代码中哪些代码块动态更新,哪些代码块不更新。 4、新增文件更新方式配置,可根据需要使用增量更新和覆盖更新。 5、新增保存全局参数和自定义文件的JSON参管理功能。 6、生成自定义文件新增JSON参数配置,可以灵活定义各种参数并能将代码直接生成到项目源码目录中去。 7、生成自定义文件新增是否生成单一文件配置和是否收集扩展信息配置。 8、生成自定义文件新增和调整了多个参数,使模板编写更加方便快捷。 9、生成数据库文档功能新增生成标题目录功能。 10、新增主要UI界面的界面大小配置功能,可根据需求在配置文件中调整UI界面大小。 11、新增友情捐赠界面,项目的发展离不开您的支持,无论捐赠金额多少都足够表达您对我的支持。 12、新增捐赠名单界面,所有捐赠者的捐赠信息和留言都会在这里展示,以此留名。 13、按字段生成JavaBean工具新增选择自定义模板功能。 14、新增MySQL关键字表名兼容性。 15、新增log4j2,TableGo的运行日志将在logs目录中输出,方便查找问题。 16、公共参数移除两个扩展参数配置,生成JavaBean功能移除用户模板配置。 17、新增TableGo官网:http://www.tablego.cn 18、新增数据信息界面,定时从官网更新数据,捐赠名单也自动从官网更新数据。 19、新增TableGo新版本提示功能,如果官网有新版本发布,客户端会有更新提醒。 20、性能优化并修复已知Bug。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值