Как ждать выполнения запроса Mysql в Java

0

У меня есть код, который говорит мне, что что-то добавлено в мою базу данных Firebase. Когда ребенок добавлен или изменен, мой Java-код запускается и в цикле я выполняю запрос Mysql. Теперь проблема в том, что цикл выполняется часто, не дожидаясь завершения запроса. Как я могу ждать запроса для финиша.

@Override
                public void onChildChanged(DataSnapshot dataSnapshot, String arg1) {
                    // TODO Auto-generated method stub
                    String chatToken    = dataSnapshot.getKey();
                    String message      = "";
                    String messageId    = "";
                    String bg_img_url   = "";
                    String domain       = "";
                    String end_user     = "";
                    String mobile       = "";
                    String time         = "";
                    String date         = "";
                    String sender       = "";
                    String status       = "0";
                    int lastCount = 1;
                    for(DataSnapshot ds : dataSnapshot.getChildren()) {
                        try {
                            System.out.println(lastCount+"getChildrenCount() -------------- "+ dataSnapshot.getChildrenCount());
                            if(lastCount == dataSnapshot.getChildrenCount()){
                                messageId = ds.getKey();
                                System.out.println("onChildChanged ds.getValue().toString() -------------- "+ ds.getValue().toString());
                                HashMap msgJsn = (HashMap) ds.getValue();
                                message = msgJsn.get("message")+"";
                                time    = msgJsn.get("time")+"";
                                date    =  msgJsn.get("date")+"";
                                sender  =  msgJsn.get("sender")+"";
                                if(msgJsn.get("status") != null){
                                    status = msgJsn.get("status")+"";
                                }
                                if(msgJsn.get("bg_img_url") != null){
                                    bg_img_url = msgJsn.get("bg_img_url")+"";
                                }
                                if(msgJsn.get("domain") != null){
                                    domain      = msgJsn.get("domain")+"";
                                }
                                if(msgJsn.get("end_user") != null){
                                    end_user    = msgJsn.get("end_user")+"";
                                }
                                if(msgJsn.get("mobile") != null){
                                    mobile      = msgJsn.get("mobile")+"";
                                }
                                if(sender.equals("web"))
                                    date    =  msgJsn.get("Date")+"";
                                System.out.println("onChildChanged chatToken -------------- "+ chatToken);
                                System.out.println("onChildChanged messageId -------------- "+ messageId);
                                System.out.println("onChildChanged message -------------- "+ message);
                                System.out.println("onChildChanged time -------------- "+ time);
                                System.out.println("onChildChanged sender -------------- "+ sender);
                                System.out.println("onChildChanged date -------------- "+ date);
                                System.out.println("onChildChanged bg_img_url -------------- "+ bg_img_url);
                                System.out.println("onChildChanged domain -------------- "+ domain);
                                System.out.println("onChildChanged end_user -------------- "+ end_user);
                                System.out.println("onChildChanged mobile -------------- "+ mobile);
                                System.out.println("onChildChanged status -------------- "+ status);
                                String result = dbcs.saveChatMessage(chatToken, message, messageId, bg_img_url, domain, end_user, mobile, time, date, sender, status);
                                System.out.println("onChildChanged result ------------------- "+ result);
                            }
                            lastCount++;
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }

И код базы данных:

public String saveChatMessage(String chatToken, String message, String messageId, String bg_img_url, String domain, String end_user, String mobile, String time, String date, String sender, String status) throws JSONException{ //NEW
        String result = "";
        try{
            String sql = "SELECT * FROM app_chat_message_list where message_id = '"+messageId+"'";
            System.out.println("sql : "+sql);
            ResultSet rs = stmt.executeQuery(sql);
            if (!rs.next()){
                sql = "INSERT INTO app_chat_message_list(chat_token, message, message_id, mobile, domain, bg_img_url, end_user, sender, date, time, status) VALUES ('"+chatToken+"', '"+message+"', '"+messageId+"', '"+mobile+"', '"+domain+"', '"+bg_img_url+"', '"+end_user+"', '"+sender+"', '"+date+"', '"+time+"', '"+status+"')";
                result =stmt.executeUpdate(sql)+"";
            }
//          stmt.close();
//          conn.close();
        }
        catch(SQLException se){
              //Handle errors for JDBC
              se.printStackTrace();
              result = "error";
           }catch(Exception e){
              //Handle errors for Class.forName
              e.printStackTrace();
              result = "error";
           }finally{
              //finally block used to close resources
              /*try{
                 if(stmt!=null)
                    stmt.close();
              }catch(SQLException se2){
                  result = "error";
              }// nothing we can do
              try{
                 if(conn!=null)
                    conn.close();
              }catch(SQLException se){
                  result = "error";
                 se.printStackTrace();
              }//end finally try
*/         }//end try
        return result;
    }
  • 0
    Выполнение запроса является синхронным, поэтому оно фактически будет ждать завершения. Пожалуйста, будьте более конкретны в описании вашей проблемы и приведите минимальный воспроизводимый пример .
  • 0
    Является ли это полезно?
Показать ещё 1 комментарий
Теги:
firebase
firebase-realtime-database

1 ответ

0

USe sleep(), чтобы разместить там, где вы хотите подождать

  • 0
    Не могу использовать метод sleep (), потому что я получаю данные непрерывно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню