寻找可嵌入的SQL美化器或重新格式化器

我正在寻找一个Java开源美化器或SQL的重新格式化程序,我可以用它来清理我使用openArchitectureWare生成的DDL语句。

“ Online Code Beautifier和Formatter ”的答案中没有任何内容对我有用,我无法让Simple SQL Formatter为我工作。

更新2:

org.hibernate.jdbc.util.BasicFormatterImpl在4.0版本中移动。 它现在位于: org.hibernate.engine.jdbc.internal.BasicFormatterImpl

更新1:

技术进步。 如Alex所述, org.hibernate.pretty.Formatter自版本3.3.2.GA起不再存在 。 替换是org.hibernate.jdbc.util.BasicFormatterImpl

 String formattedSQL = new BasicFormatterImpl().format(sql); 

原始答案:

如果你正在使用Hibernate,他们有一个内置的: org.hibernate.pretty.Formatter

 String formattedSQL = new Formatter(sql).format(); 

eclipse 数据工具平台的一部分是SQL开发工具项目 。

描述如何使用SQL Query Parser的页面非常简单地使用了SQLQuerySourceFormat ,它提供了以下选项:

  • preserveSourceFormat =生成SQL源文本时保留输入源格式的选项
  • statementTerminator =分隔多个SQL语句的字符
  • hostVariablePrefix =主机语言变量之前的字符
  • parameterMarker =标识主机语言参数的字符
  • delimitedIdentifierQuote * =包含分隔标识符的字符,其大小写将保留
  • omitSchema =当前架构(在SQL源中省略,对非限定表引用是隐式的)
  • qualifyIdentifiers =描述如何限定SQL源中的标识符的标志
  • preserveComments =在已解析的SQL源或/和生成的SQL源中保留注释的选项
  • generateCommentsForStatementOnly =仅在完整语句的上下文中为SQL源生成注释的选项,或者如果设置为false,则为语句上下文之外的单个SQL查询对象生成注释的选项

使用Hibernate v3.3.2.GA, org.hibernate.pretty.Formatter不再存在。 您可以使用它的替换: org.hibernate.jdbc.util.BasicFormatterImpl

 Formatter f = new BasicFormatterImpl(); String formatted_sql_code = f.format(ugly_sql_code); 

你有没有考虑过:

http://www.sqlinform.com

它们提供API版本和命令行版本(以及在线版本)。

但不知道成本。

您可以使用SQL语法并使用antlr构建AST。 然后,您可以以任何您喜欢的格式输出树。

也许jsqlparser会为你工作。

不像你想象的那么容易找到,因为那里有一些公平的项目。 事实上,我没有找到它,所以最终做了我自己的事情(基于h2解析器 – 如果所有其他方法都失败,你可以联系我)。 因此,我不知道它是否有美化,但在顶部写一个应该是直截了当的。

它基于语法和JavaCC,所以可能比在任何情况下用antlr重新发明这个轮子更好。 您可能会发现是否需要在复杂语句中支持各种sql方言,任何基于语法的方法都会使您失败。

这会工作 – SQL Formatter。

所以这绝对是您正在寻找的:支持Oracle,SQL Server,DB2,MySQL,Teradata和PostgreSQL的SQL格式化程序库 。