2017-10-04 18 views
0

我有一個查詢界面是這樣的:在接口存儲查詢得到數據庫(硒的webdriver + JAVA)的數據

public interface Queries { 

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

} 

我用我的Queries.QUERY1定製的運行運行查詢和工程就像一個魅力,但在某些情況下需要數據庫中的自定義值並在另一個查詢中使用它。請參閱QUERY2。通過這種方法,我無法在查詢2中使用第一個查詢結果。

我試圖將屬性文件中的查詢存儲起來,但我發現此接口方法更好,更容易。

任何建議如何實現它?任何更好的解決方案來存儲selenium測試腳本的查詢並輕鬆使用它?

+0

我想你誤解了接口是什麼。我相信你想要的是一個類或靜態類。 – Buaban

回答

1

這不是接口的意圖。您可能應該閱讀接口以瞭解有關如何使用它們的更多信息。

如果您有需要使用SQL查詢,我會創建一個幫助器類,並具有一些不會更改的屬性,例如QUERY1,然後是QUERY2的某些方法,其中該方法使用用於構建查詢的參數以及把它返還。

我還建議你給查詢描述性名稱。沒有人會知道QUERY1與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注入的最佳做法。還有很多庫被創建來幫助構建您可以使用的SQL查詢。

爲了保持一致性,您可能需要將其更改爲所有內容均爲PreparedStatement的地方。因此,請將靜態String更改爲不帶參數的方法。這樣,無論您使用哪種查詢,您的用戶體驗都是一樣的。

您也可以更改此幫助程序類以處理所有SQL業務...連接,查詢等,並返回結果而不是PreparedStatement s。隨你便。

+0

當然,我只是用這些名字作爲例子。你能給我一些高層次的例子,你有什麼想法與輔助類?我有很多,但在這種情況下,我不明白。謝謝 – brobee

+0

添加了一個代碼示例和一些解釋。 – JeffC

+0

我明白你的意思了!我有一個查詢運行器,我只是將查詢作爲字符串傳遞給它。我需要修改它來傳遞參數不僅字符串與?標記。謝謝! – brobee