2015-04-15 26 views
1

我在我的軟件中使用SQLite本地數據庫。我想根據行的發送者值檢查一行是否存在。例如:"SELECT * FROM ftp WHERE Host LIKE '"+ host +"' AND Username LIKE '"+ username +"' "如何檢查SQLite表中是否存在具有條件的行

但我想得到布爾結果,所以如果發現記錄做了一些事情,如果不做別的。鋤頭我能做到嗎?

這是我累了,但它總是如此,因爲它檢查quesry是否運行,而不是如果它返回數據。

public void ftpTableCheck(String host, String port, String username, String password){ 
    try{ 
     String query = "SELECT * FROM ftp WHERE Host LIKE '"+ host +"' AND Username LIKE '"+ username +"' "; 
     PreparedStatement pst = conn.prepareStatement(query); 

     if (pst.execute() == true){ 
      System.out.println("true"); 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

任何想法如何解決它? 謝謝

+1

你可以使用'select count(*)...'這將返回一行的匹配結果數量......可以試試'select(count(* )> 0)找到......'或者別的東西(ps-未經測試;)) – MadProgrammer

+1

我用H2做了一個測試(沒有安裝SQLite)和'select (count(*)> 0)找到了...'爲我工作並返回了一個布爾結果 – MadProgrammer

+0

好吧,它正在工作,即使COUNT(*)的作品,並在任何SQL軟件提供正確的價值。但在java中,我必須通過ResultSet獲取查詢的結果,並且此類似乎沒有任何方法來顯示行數。這就是我正在尋找的 – Dan

回答

2

所以,你可以使用類似select count(*) ...select (count(*) > 0) as found ...作爲基本查詢。

當你撥打executeQuery時,你會得到一個ResultSet作爲回報,由此你需要確定它的內容。

在你的情況,你只期待一個單列的結果,所以你可以簡單地使用ResultSet#next移動到第一行,然後從中提取列值...

public void ftpTableCheck(String host, String port, String username, String password) { 
    try { 
     String query = "SELECT (count(*) > 0) as found FROM ftp WHERE Host LIKE ? AND Username LIKE ?"; 
     PreparedStatement pst = conn.prepareStatement(query); 
     pst.setString(1, host); 
     pst.setString(2, username); 

     try (ResultSet rs = pst.executeQuery()) { 
      // Only expecting a single result 
      if (rs.next()) { 
       boolean found = rs.getBoolean(1); // "found" column 
       if (found) { 
        // You have rows 
       } else { 
        // You have no rows 
       } 
      } 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

再仔細看看JDBC Database AccessUsing Prepared Statements瞭解更多詳情

+0

工作。謝謝。 – Dan

+0

這是一個很好的改變。很高興它可以幫助;) – MadProgrammer

2

執行此操作的一般方法是獲取結果並檢查它是否爲空。對於你的問題,計算返回的行將是合乎邏輯的。

正如@MadProgrammer說,查詢關鍵詞,比如:

String query = "SELECT COUNT(*) FROM ftp WHERE Host LIKE '"+ host +"' AND Username LIKE '"+ username +"' "; 

現在你只需要得到計數並檢查它是否是0(未找到)或沒有(發現)的

+0

謝謝,它似乎在我的SQL平臺上工作。但是,請問如何獲得結果來檢查它是否爲0或更多? – Dan

+1

@丹我不是一個Java開發人員。但是:將結果作爲'ResultSet rs = pst.executeQuery(query)'獲取; – Ajoy

+1

也看看這個[教程](http://alvinalexander.com/java/edu/pj/jdbc/jdbc0003) – Ajoy

相關問題