按下选定的JAVA

时间:2016-05-13 05:47:31

标签: java sql jdbc jbutton jtextarea

我有这个jdbc代码,用我的" String Fecha"填充我的JtextArea查询数据。 我需要的是一个按钮,可以更改Fecha字符串值并使查询重新执行,以便JtextArea根据String Fecha的新值进行的新查询获取新值,但我不知道如何做到这一点可以some1告诉我一个例子?

这是我的查询代码

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"点击价值并使查询再次出现

1 个答案:

答案 0 :(得分: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
    ...
    

    此处 setX()中的X必须替换为变量 fetcha 的类型。

  • 最好将 Statement PreparedStatement ResultSet 放入try-with-resource块中(尝试按照块进行操作)括号/括号)。就像那样,即使遇到异常,它们也会在块的出口处自动关闭。关闭它们很重要,因为它释放了所有使用的JDBC资源。使用try-with-resource块,您无需手动管理(通常在异常的情况下特别糟糕)。