在接口中存储查询以从数据库获取数据(SeleniumWebDriver+java)

在接口中存储查询以从数据库获取数据(SeleniumWebDriver+java),java,sql,selenium,selenium-webdriver,interface,Java,Sql,Selenium,Selenium Webdriver,Interface,我有这样一个查询界面: public interface Queries { String QUERY1= "SELECT distinct TOP1 FROM ETC...." String QUERY2= "SELECT * FROM Whatever WHERE whateverId = QUERY1" } 我使用自定义runner with queries.QUERY1运行查询,工作起来很有魅力,但在某些情况下需要来自数据库的自定义值,并在另一个查询中使用它。请参见

我有这样一个查询界面:

public interface Queries {

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

}
我使用自定义runner with queries.QUERY1运行查询,工作起来很有魅力,但在某些情况下需要来自数据库的自定义值,并在另一个查询中使用它。请参见问题2。使用这种方法,我无法使用查询2中的第一个查询结果

我试图将查询存储在属性文件中,但我发现这种接口方法更好、更简单


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

这不是接口的用途。您可能应该仔细阅读接口,以了解如何使用它们

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

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

一些示例代码

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注入的最佳实践。还创建了许多库来帮助构建SQL查询,您可以使用这些库

为了保持一致性,您可能需要将其更改为所有内容都是PreparedStatement。因此,将静态字符串更改为不带参数的方法。这样,无论您使用哪种查询,您的用户体验都是相同的


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

我想您误解了什么是接口。我相信你想要的是一个类或一个静态类。当然,我只是用这些名称作为例子。你能给我一些高级的例子吗?你对助手类有什么想法?我有很多,但在这种情况下,我不明白。谢谢。我现在明白你的意思了!我有一个查询运行程序,我只是将查询作为字符串传递给它。我需要修改它来传递参数,而不仅仅是字符串?做记号谢谢是的,有很多方法可以做到这一点。这真的取决于你如何设置其他一切。您可以按照我的建议进行修改,使这个查询类中的所有内容都返回PreparedStatements,以便它的使用是一致的。然后,您可以使用其他类执行这些语句。理想情况下,您可能会有一个单独的类来完成与查询相关的所有工作。这是解决方案的最后也是最关键的部分。我只想把它留在这里:PreparedStatement PreparedStatement=connection.prepareStatementsqlQuery;int i=1;对于整数p:paramList{preparedStatement.setInti,p;i++;}ResultSet result=preparedStatement.executeQuery;连接。关闭;