我有这个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"点击价值并使查询再次出现
答案 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块,您无需手动管理(通常在异常的情况下特别糟糕)。