4

Is there any way to test that SQL scripts contain standard SQL with java/junit tests?

Currently we have sql scripts for creating a database etc. in a Postgres db, but when using hsqldb everything fails. That's why I wonder if any java tools exist for testing if sql statements are standard sql.

Or would it just be wise to create different sets of scripts per database vendor? If so, is there a way to test if a given script works with postgres/hsqldb?

4

6 回答 6

1

H2 数据库支持不同的模式,可以帮助您进行 postgres 测试,我发现我们的 sql 经常包含 H2 以外不支持的函数,但是您可以创建自己的“存储过程”,它实际上调用静态 Java 方法来解决这个问题。如果您想支持不同的数据库供应商,您应该使用供应商特定的脚本路线,除非您正在执行非常基本的查询。

如果您有可用的资源,我建议您设置一个完全成熟的 UAT 环境,您可以使用它来测试实时 postgres 数据库,因为即使看似很小的数据库配置差异也会以意想不到的方式影响查询计划。

于 2010-08-25T08:34:06.380 回答
0

ZQL与 Junit 配合得很好。

ZqlParser parser = new ZqlParser(any input stream);
try{
 parser = parser.readStatement();
}catch(ParseException e){
// if sql is not valid it caught here
}
于 2014-06-20T07:37:39.897 回答
0

我通常制作了一个非常简单的 java-wrapper,它通过使用带有一些标准用户/密码设置的 localhost 连接来测试此代码。

请记住使用临时数据库或已知的测试数据库,这样您的测试就不会破坏任何重要的东西。

上述原因是我需要特定的数据库(非标准功能等)。

如果您只想为 junit 测试(如语法、选择等)测试标准 sql-stuff,我会考虑在 java 中使用嵌入式 sql 数据库(通常仅限内存)。这样就可以很容易地测试很多东西,而无需安装数据库,也没有破坏其他安装的风险。

于 2010-08-25T08:16:01.603 回答
0

听起来您正在寻找 SQL 语法解析器和验证器。我熟悉的唯一 Java SQL 解析器是 Zql,但我从未真正使用过它。

去年年初有人问了一个类似的问题,结果证明最好的答案是用ANTLR编写自己的解析器。

于 2010-08-25T08:34:58.150 回答
0

不同的供应商在其 SQL 实现中公开了不同的附加功能。

您可以决定要测试的数据库集。然后使用http://dbunit.sourceforge.net来简化测试工作。

于 2010-08-25T08:43:28.950 回答
0

检查 SQL 语句是否符合标准 SQL 的最佳工具是 HSQLDB 2.0。对于数据定义语句尤其如此。HSQLDB 已写入标准,而不是在多个版本中采用标准的部分内容。

PostgresSQL 一直在缓慢地向标准 SQL 迈进。但它仍然有一些“遗留”数据类型。HSQLDB 允许您使用 CREATE TYPE 语句定义类型以与其他方言兼容。它还允许您出于相同目的在 SQL 或 Java 中定义函数。

最好的策略是尽可能使用标准 SQL,并使用用户定义的类型和函数来支持替代数据库的语法。

于 2010-08-25T15:39:17.677 回答