刷新所选按钮的查询 JAVA

Refresh Query upon botton selected JAVA

我有这个 jdbc 代码,它根据我的 "String Fecha" 使用查询数据填充我的 JtextArea 我需要的是一个可以更改 Fecha 字符串值并使查询重新执行的按钮,以便 JtextArea 根据 String Fecha 的新值所做的新查询获取新值,但我不知道该怎么做有人给我举个例子吗?

这是我的查询代码:

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();
    }

我需要一个按钮,它可以在单击时更改 "String fecha" 值并使查询再次执行

对于您要求的GUI部分,任何基础教程都会给您答案。

对于 JDBC 代码,我会推荐一个代码如下:

  • 您为数据库连接提供的用户在 URL 中定义。出于明显的安全原因(访问您的代码可以访问数据库),这是一个坏主意。将该信息放在可以轻松更改的安全位置(也是出于安全原因),在运行时恢复它们,并使用下一个语法:

    Connection dBConnection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
    
  • 每次有请求发送时不要连接到数据库。它不是高性能的。建立连接的时间可能需要数百毫秒。在应用程序启动时建立连接并将其保存在内存中,并在每次有请求发送时恢复它。关闭应用程序时不要忘记关闭它!

  • 您的 select SQL 命令中有一个参数,因此最好使用 JDBC PreparedStatement 而不是简单的 Statement。优点:它将被编译一次且仅一次(它保存在 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
    ...
    

    这里setX()中的X必须换成变量的类型fetcha.

  • 最好把你的StatementPreparedStatementResultSet 在 try-with-resource 块中(带有 try 的块后跟圆括号/方括号)。这样即使出现异常,它们也会在块的出口处自动关闭。关闭它们很重要,因为它会释放所有使用的 JDBC 资源。并且使用 try-with-resource 块你不必手动管理它(通常在异常情况下特别做得不好)。