2013-09-27 93 views
1

首先,感謝以前的幫助和建議。我只學習數據庫和MySQL,所以當我問這麼重要的新手型問題時,請耐心等待。如何在Java中使用用戶參數編寫MySQL查詢

我輸入2個參數,一個是字符串,另一個是日期。然後我想要輸出另一個值。字符串很簡單,但我無法正確比較日期。如果日期和字符串匹配,那麼這就是我正在尋找

這裏記錄的是表的副本

private String agentDetail = "CREATE TABLE AgentDetail (" 
     + "idNo INT(64) NOT NULL AUTO_INCREMENT," 
     + "initials VARCHAR(2)," 
     + "agentDate DATE," 
     + "agentCount INT(64), " 
     + "PRIMARY KEY(idNo))"; 

的問題是,它總是帶回所有的日期,無論是正確的和不正確的結果

這裏是我目前正在使用

protected void getAgentIdNo (Connection con, PreparedStatement preStatement, 
       ResultSet result, String initials, Date myDate) { 
     try { 
      preStatement = con.prepareStatement("SELECT * FROM AGENTDETAIL"); 
      result = preStatement.executeQuery(); 

      while (result.next()) { 
       if (result.getString("initials").equals(initials)){ 
        if (myDate.compareTo(result.getDate("agentDate")) == 0){ 
         System.out.println("The date and initials matched !!"); 
         System.out.println("The id no is " + result.getint("idNo"); 
        } 
       } 
      } 
     } 

     catch (SQLException ex) { 
      System.out.println("An error occured when reading from the data base"); 
      ex.printStackTrace(); 
     } 
    } 

我也知道,這個代碼是完美到目前爲止感受到碼建議一個更多的對rofessional看代碼。 在此先感謝您的任何幫助和支持。

+1

'而(result.next()){ 如果(result.getString( 「縮寫」)。等於(縮寫)){如果(myDate.compareTo (result.getDate(「agentDate」))== 0){'[WHERE子句](http://dev.mysql.com/doc/refman/4.1/en/select。html):這是數據庫首先要做的...... – ppeterka

回答

0

而不是使過濾器programaticaly,我建議(在這種情況下,使SQL查詢)。

你可以這樣做:

protected void getAgentIdNo (Connection con, PreparedStatement preStatement, 
       ResultSet result, String initials, Date myDate) { 
     try { 
      preStatement = con.prepareStatement("SELECT * FROM AGENTDETAIL as ag WHERE ag.initial = ? AND date = ?"); 
      preStatment.setSring(1,initials); 
      preStatment.setString(2,date); 
      result = preStatement.executeQuery(); 

     while (result.next()) { 
        System.out.println("The date and initials matched !!"); 
        System.out.println("The id no is " + result.getint("idNo"); 
      } 
     } 
    } 

    catch (SQLException ex) { 
     System.out.println("An error occured when reading from the data base"); 
     ex.printStackTrace(); 
    } 
} 

ATT:欲瞭解更多詳情請諮詢this鏈接。

希望它幫助^^

+0

如果參數已經是日期,並且底層數據庫類型是DATE,那麼你應該使用'preStatement.setDate(...) ,不是嗎? –

+0

ofcourse我的朋友。但我認爲給定的代碼。 – Cold

1

這是一個壞主意。這是爲了做到這一點:

所有的
preStatement = con.prepareStatement("SELECT * FROM AGENTDETAIL WHERE initials = ? AND angetDate = ?"); 
    preStatment.setSring(1, initials); 
    preStatment.setDate(2, new java.sql.Date(date.getTime())); 
0

首先,

我要感謝那些誰已經閱讀,審查,報較差黑客工作。 出現了兩種不同的思想流派,我當然都嘗試過。嘗試不同的方法真是太棒了。

我發現我正在寫代碼的同時我正在尋找一份工作,這項工作非常乾淨。然而,其他答覆也導致我調查了其他機會。

該段是我正在撰寫的更大系統的一部分,用於增加我的工作組合,我正在做的是使用Java創建一個可視界面,該界面僅向用戶每天分配一個id編號。然後,用戶可以前來,在另一段代碼中可以手動輸入客戶編號或者生成一個編號。這是idNoagentCount號碼。順便說一句,我發現命令行代碼編程更容易。 :-)

protected void getAgentIdNo (Connection con, PreparedStatement preStatement, ResultSet result, AgentDetail ageDet) { 
     try { 
      preStatement = con.prepareStatement("SELECT * FROM AGENTDETAIL as ag WHERE ag.initials = ? AND ag.agentDate = ?"); 
      preStatement.setString(1,ageDet.getInitials()); 
      preStatement.setDate(2,ageDet.getMyDate()); 
      result = preStatement.executeQuery(); 

      while (result.next()) { 
       ageDet.setAgeIdNo(result.getInt("idNo")); 
       ageDet.setAgeCount(result.getInt("agentCount")); 
      } 
     } 

     catch (SQLException ex) { 
      System.out.println("An error occurred when reading from the data base"); 
      ex.printStackTrace(); 
     } 
    } 

再次感謝你們