java - 在接口(interface)中存储查询以从数据库获取数据(Selenium webdriver + java)

标签 java sql selenium selenium-webdriver interface

我有一个像这样的查询界面:

public interface Queries {

    String QUERY1= "SELECT distinct TOP1 FROM ETC...."
    String QUERY2= "SELECT * FROM Whatever WHERE whateverId = QUERY1"

}

我使用自定义运行器和 Queries.QUERY1 运行查询,并且工作起来就像一个 super 按钮,但在某些情况下需要来自数据库的自定义值并在另一个查询中使用它。请参阅查询2。通过这种方法,我无法在查询 2 中使用第一个查询结果。

我尝试将查询存储在属性文件中,但我发现这种界面方法更好、更简单。

有什么建议我该如何实现吗?有没有更好的解决方案来存储 Selenium 测试脚本的查询并轻松使用它?

最佳答案

这不是接口(interface)的目的。您可能应该阅读接口(interface)以了解有关如何使用它们的更多信息。

如果您需要使用 SQL 查询,我将创建一个帮助器类,并具有一些不会更改的属性,例如 QUERY1,然后是 QUERY2 的一些方法,其中该方法采用用于构建查询并返回的参数它。

我还建议您为查询提供描述性名称。没有人会知道 QUERY1 v QUERY2 是什么。 TopTenBugsMostPurchasedProduct 等名称会更容易识别。

一些示例代码

public static class Queries
{
    public static String TopProduct = "SELECT TOP 1 ProductId FROM Products";

    public static PreparedStatement getTopNOfField(Connection connection, int number, String fieldName)
    {
        PreparedStatement statement = connection.prepareStatement("SELECT TOP ? ? FROM Products");
        statement.setInt(1, number);
        statement.setString(2, fieldName);

        return statement;
    }
}

我不是 SQL 专家,但这应该能让您了解我在说什么。我选择了 PreparedStatement 因为这是避免 SQL 注入(inject)的最佳实践。还创建了许多库来帮助构建您可以使用的 SQL 查询。

您可能希望将其更改为一切都是 PreparedStatement 以保持一致性。因此,将静态String更改为不带参数的方法。这样,无论您使用哪个查询,您的用户体验都是相同的。

您还可以更改此帮助程序类来处理所有 SQL 业务...连接、查询等,并返回结果而不是 PreparedStatement。这取决于你。

关于java - 在接口(interface)中存储查询以从数据库获取数据(Selenium webdriver + java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46575076/

相关文章:

Java - JPanel 和 KeyListener 问题

mysql - SQL 处理类似于英语和瑞典语字符

java - 类型错误 : Cannot find function createHTMLDocument in object

c# - 使用云服务对 Web 应用程序进行压力测试

java - 相对路径在 lobgack.xml 包含文件中不起作用

java - @RequestMapping( Produces = "application/json;charset=utf-8") 是否会阻止 jsonp 请求?

java - 在 Windows 下的 java 中,如何找到重定向的桌面文件夹?

SQL:如何根据同一表中其他列的值创建新列

mysql - 删除 MySQL 中除重复行之外的所有重复行?

java - 如何根据 HTML 展开下拉列表后单击复选框