import com.mysql.jdbc.jdbc2.optional.MysqlDataSource
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service
import java.sql.*
import java.util.*
import javax.sql.DataSource@Service
class Mysql2OdpsService {/*** 生成 ODPS DDL 语句*/fun generateddl(table: String, dataSource: MysqlDataSource): String? {val conn = getConnection(dataSource) ?: return nullval fields = getTableFields(table, dataSource)return ddl(table, fields)}/*** 获取数据库全部表*/fun getAllTables(dataSource: MysqlDataSource): List<String>? {val conn = getConnection(dataSource) ?: return nullval result = ArrayList<String>()var rs: ResultSet? = nulltry {conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)val meta = conn.metaData//目录名称, 数据库名, 表名称, 表类型rs = meta.getTables(catalog(), dataSource.databaseName, tableNamePattern(), types())while (rs?.next()) {result.add(rs.getString("TABLE_NAME"))}} catch (e: Exception) {logger.error("获取数据库全部表:", e)} finally {close(conn, null, rs)}return result}/*** 获取数据库表所包含的字段*/fun getTableFields(table: String, dataSource: MysqlDataSource): List<FieldInfo>? {val conn = getConnection(dataSource) ?: return nullval result = ArrayList<FieldInfo>()var rs: ResultSet? = nulltry {val meta = conn.metaDatars = meta.getColumns(catalog(), dataSource.databaseName, table, null)while (rs.next()) {val fieldInfo = FieldInfo(rs.getString("COLUMN_NAME"),rs.getString("REMARKS"),rs.getString("TYPE_NAME"))result.add(fieldInfo)}} catch (e: Exception) {logger.error("获取数据库表所包含的字段:", e)} finally {close(conn, null, rs)}return result}data class FieldInfo(var fieldName: String, var comment: String, var type: String)fun getConnection(dataSource: DataSource): Connection? {var conn: Connection? = nulltry {conn = dataSource.connection} catch (e: SQLException) {logger.error("数据库连接失败", e)}return conn}/*** 关闭(释放)资源** @param conn Connection* @param ps   PreparedStatement* @param rs   ResultSet*/fun close(conn: Connection?, ps: Statement? = null, rs: ResultSet? = null) {var conn = connvar ps = psvar rs = rs//关闭ResultSetif (rs != null) {try {rs.close()} catch (e: SQLException) {rs = null}}//关闭PreparedStatementif (ps != null) {try {ps.close()} catch (e: SQLException) {ps = null}}//关闭Connectionif (conn != null) {try {conn.close()} catch (e: SQLException) {conn = null}}}/*** a catalog name; must match the catalog name as it is stored in the database; "" retrieves those without a catalog; null means that the catalog name should not be used to narrow the search*/fun catalog(): String? {return null}/*** a table name pattern; must match the table name as it is stored in the database*/fun tableNamePattern(): String {return "%"}/*** a list of table types, which must be from the list of table types returned from [DatabaseMetaData],to include; null returns all types*/fun types(): Array<String> {return arrayOf("TABLE", "VIEW")}fun ddl(table: String, fields: List<FieldInfo>?): String {var fieldLines = StringBuilder()fields?.forEachIndexed { index, fieldInfo ->if (index == 0) {val line = "${fieldInfo.fieldName}               STRING COMMENT '${fieldInfo.comment}'"fieldLines.append("\n")fieldLines.append(line)fieldLines.append("\n")} else {val line = ",${fieldInfo.fieldName}               STRING COMMENT '${fieldInfo.comment}'"fieldLines.append(line)fieldLines.append("\n")}}return """
CREATE TABLE IF NOT EXISTS $table(
$fieldLines
)
COMMENT '' PARTITIONED BY
(pt STRING COMMENT '时间分区键-yyyymmdd'
)
LIFECYCLE 750;
""".trimIndent()}val logger = LoggerFactory.getLogger(this.javaClass)
}

Kotlin 开发者社区

国内第一Kotlin 开发者社区公众号,主要分享、交流 Kotlin 编程语言、Spring Boot、Android、React.js/Node.js、函数式编程、编程思想等相关主题。

越是喧嚣的世界,越需要宁静的思考。

合抱之木,生于毫末;
九层之台,起于垒土;
千里之行,始于足下。
积土成山,风雨兴焉;
积水成渊,蛟龙生焉;
积善成德,而神明自得,圣心备焉。
故不积跬步,无以至千里;
不积小流,无以成江海。
骐骥一跃,不能十步;
驽马十驾,功在不舍。
锲而舍之,朽木不折;
锲而不舍,金石可镂。
蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。
蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。

Kotlin (Java) 获取 mysql 数据库的所有表,表的所有字段,注释,字段类型相关推荐

  1. springBoot下java代码mysql数据库定时任务(创建表)

    springBoot下用java代码创建表 首先找到application.yml配置文件进行数据库连接配置 2-编写初始化数据库表类 这里就先写个demo用作测试 在项目目下新建一个包,报名任意,在 ...

  2. java实现两张表的数据同步,java实现mysql数据库从一张表插入数据到另一张表

    包 cn.gtmc.schedule.app; 导入 cn.gtmc.schedule.domain.Employee; import java.sql. * ; 导入 java.util.Array ...

  3. java操作MySQL数据库(插入、删除、修改、查询、获取所有行数)

    插播一段广告哈:我之前共享了两个自己写的小应用,见这篇博客百度地图开发的两个应用源码共享(Android版),没想到有人找我来做毕设了,年前交付,时间不是很紧,大概了解了下就接下了,主要用到的就是和服 ...

  4. java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码

    jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...

  5. 获取mysql数据库表名、表头信息

    1.查询mysql数据库所有的表名 SELECT TABLE_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '库名' -- 例: ...

  6. Hibernate连接mysql数据库并自动创建表

    天才第一步,雀氏纸尿裤,Hibernate第一步,连接数据库. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个 ...

  7. mysql数据库java链接,java链接MySQL数据库方法

    第一步:安装MySQL 这步我就很少说了,点击去看看怎么安装吧.html 第二步:建立数据库 安装好以后,咱们来建立一个数据库,一个表.(代码以下). //建立数据库 test: //在数据库中建立表 ...

  8. MySql数据库记录相差14小时排错,使用Java访问Mysql数据库时出现时区异常的解决方案

    最近遇到1个大坑,A系统迁移到B系统,2边系统 同1个字段 createTime 看到的不一致. 表象: A系统: 2019-6-10 17:34 B系统: 2019-6-11 .... 再次尝试: ...

  9. MySQL——Java 访问 MySQL 数据库

    一.   下载与安装 MySQL   Connector/J MySOL  驱动  MySQL Connector/J  下载网站 https://dev.mysql.com/downloads/co ...

最新文章

  1. 计算机应用看法,对计算机应用教学方法改革的看法
  2. 连云港职业技术学院有计算机系吗,连云港职业技术学院电子信息工程技术专业...
  3. asp.net引用用户控件
  4. 注册表使用次数修改_如何使用系统注册表编辑器来优化电脑系统
  5. matlab ofdmmodulator,那位高手指点一下OFDM的基本仿真,用MATLAB,谢谢了
  6. selenium--下拉列表选择
  7. 【SSM】企业差旅管理系统-李兴华-专题视频课程
  8. 白噪声,有色噪声的定义、特性及其MATLAB仿真
  9. 用IMAP4访问Exchange邮箱
  10. android 状态栏(StatusBar)
  11. 国内外视频编解码标准体系-说说MPEG、ITU、AOM、AVS演进历程
  12. 测试平台开发:(14)测试用例管理功能设计
  13. 代写java Assignment作业、代做UML Class Diagram程序作业、代写代做java程序作业代做McMaster-Carr、代做CS5010 java...
  14. 拿什么拯救你?程序员的虚荣心...
  15. 淘汰VBA,用InfoPath----InfoPath相关文章两三篇
  16. 阿里云OSS存储服务器
  17. 微信多媒体团队访谈:音视频开发的学习、微信的音视频技术和挑战等
  18. 爬山的蜗牛旅程:redis 订阅发布
  19. 老年俱乐部app开发
  20. 2022几款开源的态势感知、攻击监控、日志分析等平台调研

热门文章

  1. 需求的类型和产品经理的工作
  2. 他很惊讶_局座您是来参加云栖大会吗?
  3. Unity中手动压缩图片 修改图片分辨率
  4. 全国优秀计算机动画作品,分享創意——全国中小学优秀电脑作品分析.ppt
  5. Discuz!开发之将论坛首页设置为某个版块页面的方法
  6. 音视频SDK封装截图
  7. market Dwon
  8. 在Windows中添加右键菜单选项及快捷键(转)
  9. OpenCV 最小二乘+距离最小拟合圆
  10. discuzapi插件_discuz! api