Giter Club home page Giter Club logo

database-export's Introduction

转到Gitee

转到Github

加群

database-export V5.0.0

Spring Boot 2 Element-UI VUE3 Docker Github Gitee

database-export是一款多线程生成数据库结构文档的开源springboot工程,能支持最新的数据库版本,支持导出多种格式的文件,也能直接在网页上预览

现已支持的数据库

  • MySQL
  • ORACLE
  • SqlServer
  • Postgresql
  • Clickhouse
  • Sqlite3
  • DB2
  • 达梦

现已支持导出的类型

  • word
  • markdown
  • pdf
  • html

项目特点

  • 导出sql支持多线程查询,导出速度更快
  • 使用element-ui-plus,界面更美观
  • 支持导出word、markdown、pdf、html,更支持网页预览
  • 导出速度高于现在的所有导出工具

想加入技术开发群的加我,备注加群即可(定制模板请备注定制模板)

加群

支持一下我

加群

How to use

1.docker运行(推荐)

docker pull pomzwj/database-export:5.0.0
docker run -d --name database-export -p 9999:9999 pomzwj/database-export:5.0.0

2.下载release下的最新打包的压缩包

cmd/shell执行java -jar xxx.jar 即可启动

3.下载最新的源码启动


源码运行方法

执行database-export-web下的DatabaseExportApplication.java即可,然后浏览器输入:http://localhost:9999

如果想修改前端,前端项目在

vue2(database-export < 5.0.0)

https://github.com/PomZWJ/database-export-vue

vue3(database-export >= 5.0.0)

https://github.com/PomZWJ/database-export-web-vue3

  • 1.前端打包后,会出现dist文件夹,把index.html,logo.png,vite.svg替换到database-export\src\main\resources\templates文件夹

  • 2.database-export\src\main\resources\static\static文件夹删除(一定要先删除),然后在把dist中的assets文件夹复制过来

  • 3.重启工程即可生效

4.用户自行开发

参考模块[database-export-core-demo]

在pom.xml文件中引入

<dependency>
    <groupId>io.github.pomzwj</groupId>
    <artifactId>database-export-core</artifactId>
    <version>5.0.0</version>
</dependency>

JAVA代码中的使用

protected static DataSource getDataSource() {
    //自行定义数据源
}
public static void main(String[] args){
    DataSource dataSource = getMySqlDataSource();
    try {
        DataBaseExportExecute.executeFile(dataSource, new DbExportConfig()
                .setSearchIndex(true)
                .setExportFileTypeEnum(ExportFileType.WORD)
                //详情见DataBaseType,以下的为字段名,自定字段名导出
                //表字段
                .setShowColumnList(Lists.newArrayList("columnName","dataType","autoIncrement"))
                //索引字段
                .setShowIndexList(Lists.newArrayList("name","seqIndex"))
                .setGenerationFileTempDir("生成文件的位置"));
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        if (dataSource != null) {
            ((DruidDataSource) dataSource).close();
        }
    }
}

首页截图

操作页面截图

html预览页面截图

word页面截图

更新日志

2024-06-16(V5.0.0)

1.从vue2升级到vue3

2.element-ui 升级 element-ui-plus

3.UI改版

4.后台JAVA架构改造,改造成可以用户使用的第三方SDK,供用户自行开发

5.修复已知BUG

2023-12-14(V4.1.0)

1.封装docker镜像

2.导出可以选择表导出

3.修复已知bug

2023-05-21(V4.0.0)

1.前端工程单独开发,不再使用之前thymeleaf引入vue.js的做法

2.新增支持DB2和达梦数据库

3.新增导出支持pdf,html

2022-10-29(V3.4.0)

1.新增支持Sqlite

2.导出支持Markdown

2022-10-27(V3.3.0)

1.新增支持ClickHouse

2.修复已知bug

2022-03-27(V3.2.0)

1.支持Postgresql

2.修复已知BUG

2021-12-16(V3.1.0)

1.数据库连接池改成工厂模式,引入了druid和hikaricp两种连接池,可在yml自定义配置

2.前端html预览美化,加入了导航

3.修复已知BUG

2021-06-27(V3.0.0)

1.查询数据库的时候加入了多线程查询,使得导出速度更快

2.抛弃了之前使用的原生JDBC连接,引入了druid和JdbcTemplate

3.支持导出excel

4.支持前端html预览

2021-06-05(V2.2.0)

1.改变java设计模式为工厂模式,方便用户自己扩展

2.优化了后台代码,尽量把代码实现高度配置化

3.BUG改进

2020-07-15(V2.1.0)

1.去除了打包后,application需要重新配置模板文件,使部署更简单,不需要在改动到配置文件

2.去除了自定义文件生成目录

3.让生成的文件能够下载

4.BUG改进

2019-09-26(V2.0.0)

1.使用了VUE+Element-UI重新修改了界面,抛弃了原本的Bootstrap

2.BUG改进

2019-04-20(V1.0.0)

1.使用springboot2.x+Bootstrap完成界面

2.能导出docx类型的文档,支持mysql,oracle,sql server


database-export's People

Contributors

pomzwj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

database-export's Issues

Mysql导出属性有错误

我导出mysql选择是否可为空和是否是主键,标记的不准确,主键所有列都现实是主键。。。

oracle bug

image
image
我的数据库为32 导出来之后长度都多了4倍

连接数据库失败

连接数据库,显示
Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed

mysql无法生成

2021-12-21 10:54:32,134 ERROR com.pomzwj.controller.DataExportV2Controller [] - desc=生成word文档[v2],获取失败, 原因:null
java.lang.NullPointerException: null
at com.pomzwj.officeframework.poitl.PoitlOperatorService.getRow(PoitlOperatorService.java:84)
at com.pomzwj.officeframework.poitl.PoitlOperatorService.makeDoc(PoitlOperatorService.java:62)
at com.pomzwj.controller.DataExportV2Controller.makeWord(DataExportV2Controller.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

装了wps和office2010

同学,您这个项目引入了95个开源组件,存在5个漏洞,辛苦升级一下

检测到 PomZWJ/database-export 一共引入了95个开源组件,存在5个漏洞

漏洞标题:Apache Commons Compress 安全漏洞
缺陷组件:org.apache.commons:[email protected]
漏洞编号:CVE-2021-35517
漏洞描述:Apache Commons Compress是美国阿帕奇(Apache)基金会的一个用于处理压缩文件的库。
Apache Commons Compress存在资源管理错误漏洞,该漏洞源于当读取特殊设计的TAR归档文件时,Compress可以分配大量内存,从而导致小输入出现内存不足错误。
影响范围:[1.1, 1.21)
最小修复版本:1.21
缺陷组件引入路径:com.pomzwj:[email protected]>com.deepoove:[email protected]>org.apache.poi:[email protected]>org.apache.commons:[email protected]

另外还有5个漏洞,详细报告:https://mofeisec.com/jr?p=a37573

一运行就报错

reating bean with name 'dataExportV2Controller': Unsatisfied dependency expressed through field 'markdownOperatorService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'markdownOperatorService' defined in URL [jar:file:/Users/seifon/Downloads/database-export-3.4.0.jar!/BOOT-INF/classes!/com/pomzwj/officeframework/md/MarkdownOperatorService.class]: Instantiation of bean failed; nested exception is java.lang.IllegalAccessError: class com.pomzwj.officeframework.md.MarkdownOperatorService (in unnamed module @0x5442a311) cannot access class sun.security.action.GetPropertyAction (in module java.base) because module java.base does not export sun.security.action to unnamed module @0x5442a311
2022-11-14 21:43:52,082 INFO  org.apache.catalina.core.StandardService [] - Stopping service [Tomcat]
2022-11-14 21:43:52,582 INFO  o.s.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener [] - 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-11-14 21:43:52,653 ERROR org.springframework.boot.SpringApplication [] - Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataExportV2Controller': Unsatisfied dependency expressed through field 'markdownOperatorService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'markdownOperatorService' defined in URL [jar:file:/Users/seifon/Downloads/database-export-3.4.0.jar!/BOOT-INF/classes!/com/pomzwj/officeframework/md/MarkdownOperatorService.class]: Instantiation of bean failed; nested exception is java.lang.IllegalAccessError: class com.pomzwj.officeframework.md.MarkdownOperatorService (in unnamed module @0x5442a311) cannot access class sun.security.action.GetPropertyAction (in module java.base) because module java.base does not export sun.security.action to unnamed module @0x5442a311
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:659)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:639)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:414)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)
	at com.pomzwj.DatabaseExportApplication.main(DatabaseExportApplication.java:17)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
	at java.base/java.lang.reflect.Method.invoke(Method.java:577)
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'markdownOperatorService' defined in URL [jar:file:/Users/seifon/Downloads/database-export-3.4.0.jar!/BOOT-INF/classes!/com/pomzwj/officeframework/md/MarkdownOperatorService.class]: Instantiation of bean failed; nested exception is java.lang.IllegalAccessError: class com.pomzwj.officeframework.md.MarkdownOperatorService (in unnamed module @0x5442a311) cannot access class sun.security.action.GetPropertyAction (in module java.base) because module java.base does not export sun.security.action to unnamed module @0x5442a311
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1334)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1232)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1389)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:656)
	... 26 common frames omitted
Caused by: java.lang.IllegalAccessError: class com.pomzwj.officeframework.md.MarkdownOperatorService (in unnamed module @0x5442a311) cannot access class sun.security.action.GetPropertyAction (in module java.base) because module java.base does not export sun.security.action to unnamed module @0x5442a311
	at com.pomzwj.officeframework.md.MarkdownOperatorService.<clinit>(MarkdownOperatorService.java:27)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:300)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(MethodHandleAccessorFactory.java:103)
	at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(ReflectionFactory.java:236)
	at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Constructor.java:546)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:496)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:211)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1326)
	... 37 common frames omitted
 % java --version
openjdk 18.0.1.1 2022-04-22
OpenJDK Runtime Environment Homebrew (build 18.0.1.1+0)
OpenJDK 64-Bit Server VM Homebrew (build 18.0.1.1+0, mixed mode, sharing)

优化建议

体验了一把,效果不错,速度很快,个人感觉唯一不足的就是只能预览HTML,不能导出HTML

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.