Java,避免在执行sql查询时冻结应用程序

Java,避免在执行sql查询时冻结应用程序,java,sql,multithreading,Java,Sql,Multithreading,你好。我编写了一个服务器应用程序,它处理来自应用程序客户端的许多套接字连接,每个客户端向服务器请求来自sql数据库的某些信息,以显示在其gui界面中,并在服务器内部调用一个方法来进行查询和检索数据 在某些情况下,应用程序在尝试从服务器检索数据时挂起,我希望我的应用程序不会冻结,而是在检索请求时显示进度条或加载动画。这有可能吗?我读过关于线程、工作线程和sql池的文章,但我不知道它到底适合我的需要 我使用服务器应用程序上的此类来管理我的查询: final class QueryManager {

你好。我编写了一个服务器应用程序,它处理来自应用程序客户端的许多套接字连接,每个客户端向服务器请求来自sql数据库的某些信息,以显示在其gui界面中,并在服务器内部调用一个方法来进行查询和检索数据

在某些情况下,应用程序在尝试从服务器检索数据时挂起,我希望我的应用程序不会冻结,而是在检索请求时显示进度条或加载动画。这有可能吗?我读过关于线程、工作线程和sql池的文章,但我不知道它到底适合我的需要

我使用服务器应用程序上的此类来管理我的查询:

final class QueryManager {
//abstract System.out.println("Ya");
static Connection con = null;
static String LoginMsg = "No conectado";
public static void init(){
try{
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
   con=DriverManager.getConnection("jdbc:sqlserver://PERSONAL:49617;databaseName=prueba","sa", "12345678");
   System.out.println("Conexión Establecida");
   LoginMsg = "Conectado al Servidor";
}catch(ClassNotFoundException | SQLException e){
    e.printStackTrace();
    System.out.println("Exception: " + e.getMessage());
}
}
 public static void Query(String query, int i){
try{
Statement st = con.createStatement();
    try (ResultSet rset = st.executeQuery(Pquery(query))) {
        rset.next();
        System.out.println(rset.getString(1)+i);
    }
}catch(SQLException e){
System.out.println(e);
}


}

public static String Pquery(String pquery){
return pquery;
}
public static boolean Login(String user, String pass){
boolean r = false;
try{
Statement getCon = con.createStatement();
ResultSet EQuery = getCon.executeQuery("select * from users where usuario ='"+user+"'      and contrasena ='"+pass+"'");
EQuery.next();       
    if(EQuery.getString(1) != null){
        r = true;  
        LoginMsg = "Bienvenido";
    }else{
        r = false;

    }
    EQuery.close();
}catch(SQLException e){
    System.out.println(e);
}
return r;

}
public static String getLoginMsg(){
return LoginMsg;
}
public static void printer(){
    System.out.println("Ya");

}
}
提前谢谢你,任何关于逻辑的帮助也将不胜感激

编辑:

我找到了这个例子,可能会有用。谢谢你的支持


在单独的后台线程中运行客户端逻辑,发送请求并从服务器获取结果。您可以使用
SwingWorker
来实现这一点。借助于此,您可以在后台线程中运行UI逻辑时运行进度条。
例如:

在单独的后台线程中运行客户端逻辑,从服务器发送请求并获取结果。您可以使用
SwingWorker
来实现这一点。借助于此,您可以在后台线程中运行UI逻辑时运行进度条。
例如:

您可以这样做,您需要按照您的建议使用线程。我已经有一段时间没有使用线程了,所以我不能马上帮你。我建议您使用PreparedStatement而不是Statement。谢谢。我来检查一下那个窃听器。谢谢你的支持。如果你能做到这一点,你将需要使用线程,就像你建议的那样。我已经有一段时间没有使用线程了,所以我不能马上帮你。我建议您使用PreparedStatement而不是Statement。谢谢。我来检查一下那个窃听器。谢谢你的支持,谢谢。我试试那个例子,谢谢。我来试试那个例子。