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

时间:2008-11-23 14:10:59

标签: java sql open-source

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

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

8 个答案:

答案 0 :(得分:45)

更新2:

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

更新1:

技术进步。正如Alex所述,自版本3.3.2.GA 以来 org.hibernate.pretty.Formatter已不复存在。替换为org.hibernate.jdbc.util.BasicFormatterImpl

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

原始答案:

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

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

答案 1 :(得分:5)

日食Data Tools Platform的一部分是SQL Development Tools Project

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

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

答案 2 :(得分:5)

使用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);

答案 3 :(得分:2)

您是否考虑过:

http://www.sqlinform.com

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

不知道成本。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

也许jsqlparser对您有用。

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

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

答案 6 :(得分:1)

这会有用 - SQL Formatter.

答案 7 :(得分:0)

所以这绝对是你要找的:A SQL formatter library支持Oracle,SQL Server,DB2,MySQL,Teradata和PostgreSQL。