2016-05-13 63 views
0

我有這個jdbc代碼,填充我的JtextArea與查詢數據基於我的「字符串」 我需要的是一個按鈕,可以更改Fecha字符串值並使查詢重新執行JtextArea會根據由String Fecha的新值創建的新查詢獲取新值,但我不知道如何執行此操作,可以通過示例告訴我一些情況嗎?刷新查詢選定的JAVA

這是我的查詢代碼

try{ 
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     conn3 =  DriverManager.getConnection("jdbc:sqlserver://ARTURO-LAPTOP;user=sa;password=sacompusis;database=PDV"); 
     st3 = conn3.createStatement(); 
     rs3= st3.executeQuery("SELECT Nombre_Pdv, SUM(Total) AS Expr1 FROM VENTA_PLATILLOS where Fecha ='"+fecha+"' GROUP BY Nombre_Pdv"); 

     StringBuilder sb = new StringBuilder(); 
     /* sb.append("Ingresos por Punto de Venta" + "\n" +"");*/ 
     while(rs3.next()){ 
      sb.append(rs3.getString(1) +"\n"+ rs3.getString(2)+"\n"); 
     } 
     textArea.setFont(new Font("Monospaced", Font.BOLD, 15)); 
     textArea.setEditable(false); 
     textArea.setText(sb.toString()); 

    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 

我需要改變上點擊「字符串出生日期」的值,並再次進行查詢excecutes

+0

添加一個按鈕到你的GUI和'onClick'這個按鈕執行發佈代碼 – Sanjeev

回答

1

您的要求的GUI部分和寬鬆,任何基本的教程都會給你答案。

對於JDBC代碼,我會推薦後的下一言論代碼:

  • 您提供用於連接到數據庫的用戶在URL中定義。出於明顯的安全原因(訪問您的代碼可以訪問數據庫)是一個壞主意。把這些信息在一個安全的地方,它可以很容易地改變(出於安全原因也一樣),在運行時恢復它們,並使用而接下來的語法:

    Connection dBConnection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); 
    
  • 不要每次連接到數據庫您有請求發送。它不是高性能的。建立連接的時間可能需要幾百毫秒。在應用程序啓動時建立連接,並將其保存在內存中,並在每次有請求發送時恢復它。當您關閉應用程序時,請不要忘記關閉它!

  • 你在有一個參數你選擇 SQL命令,所以最好使用JDBC 的PreparedStatement而不是簡單的聲明。優點:它將被編譯一次並且只被編譯一次(它保存在JDBC連接緩存中)。在你的情況下,循環中有一個GUI,所以它不是一個巨大的優勢。但是在一個擁有衆多用戶的在線互聯網應用中,性能的提升顯得尤爲重要。所以最好學習這種好的做法。

    private static final String GET_MY_INFO = "SELECT nombre_pdv, SUM(total) " + 
                  "FROM venta_platillos " + 
                  "WHERE fecha = ? " + 
                  "GROUP BY nombre_pdv"; 
    ... 
    StringBuilder sb = new StringBuilder(); 
    try (
        PreparedStatement stmt = dBConnection.prepareStatement(GET_MY_INFO); 
    ) { 
        stmt.setX(1, fetcha); 
        ... 
        try (
         ResultSet rset = stmt.executeQuery(); 
        ) { 
         while (rset.next()) { 
          sb.append(rset.getString(1) +"\n"+ rset.getString(2)+"\n"); 
         } 
        } 
    } 
    // use sb as you want 
    ... 
    

    這裏X在setX的()必須由可變fetcha的類型取代。

  • 這是更好地把你的聲明的PreparedStatement的ResultSet在試穿與資源塊(block與嘗試,然後括號/括號中)。就像這樣,即使發生異常,它們也會在塊的出口自動關閉。關閉它們非常重要,因爲它釋放了所有使用的JDBC資源。通過try-with-resource模塊,您不必手動管理它(通常在發生異常時特別嚴重)。