Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [JAVA] problema query

  1. #1

    [JAVA] problema query

    Ciao a tutti,
    volevo sapere se è possibile e come si fa ad attendere che una query di update termini la sua esecuzione prima di affettuare altre operazioni.
    Mi spiego meglio:
    nella classe in questione, eseguo ciclicamente una funzione contenente 2 query, una di SELECT e una di UPDATE sulla stessa tabella; alla prima esecuzione funziona tutto bene, alla seconda "passata" all'esecuzione della SELECT risulta che la query di UPDATE non ha ancora terminato di la precedente esecuzione, questo mi crea un conflitto nella chiave primaria.
    Riporto di seguito il listato delle due query

    //generazione nuovo codice operazione
    rs = stmt.executeQuery("SELECT MAX(CodOperazione) FROM Operazioni");
    int codOp = 0;
    while(rs.next()){
    codOp = rs.getInt(1);
    }

    copOp++;

    //aggiornamento operazioni
    stmt.executeUpdate("INSERT into Operazioni CodOperazione, IdDipendente,Dipendente, Operazione,DataOra,Descrizione) values("+codOp+","+codDip+",'"+utente+"','Modifica ','"+dataOP+"','"+descrizione+"')");

    stmt.close();

    Ciao Grazie.

  2. #2
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Questo è un grosso dilemma che potrebbe spingerci a discussioni abbastanza lunghe; cmq dovresti leggere le specifiche per le transazioni sui db e in particolare le interfacce JTA e lo standard XA; ora il problema principale è che cerchi di effettuare delle operazioni sul db senza rtener conto della transazionalità.. per ovviare a ciò puoi o utilizzare degli EJB (ma tieni presente che senza un container EJB non se ne fa nulla e non so se na hai davvero bisogno), oppure dei framework di persistenza dei dati come l'ottimo Hobernate oppure il più giovane (ma secondo me migliore) JDO.
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

  3. #3
    Secondo me potresti bloccare il database in scrittura/lettura (a seconda del caso) con la funzione (Lock se non erro) del mysql in modo che prima di eseguire un altra funzione che potrebbe appunto creare interferenza termini prima quella precedente.

  4. #4
    Problema risolto... grazie mille

  5. #5
    Originariamente inviato da markmark
    Problema risolto... grazie mille
    Giusto per sapere, come l'hai risolto?

  6. #6
    ho usato i blocchi come mi avevi detto tu.
    ho impostato la connessione sulla gestione manuale delle priorità facendo:

    conn.setAutoCommint(false);

    e alla fine del codice prima di chiudere la connessione richiamo il metodo commit():

    conn.commit();
    conn.close();

    in questo modo esegue tutte le query prima di andare avanti.
    Sembrerebbe funzionare

  7. #7
    Originariamente inviato da markmark
    ho usato i blocchi come mi avevi detto tu.
    ho impostato la connessione sulla gestione manuale delle priorità facendo:

    conn.setAutoCommint(false);

    e alla fine del codice prima di chiudere la connessione richiamo il metodo commit():

    conn.commit();
    conn.close();

    in questo modo esegue tutte le query prima di andare avanti.
    Sembrerebbe funzionare
    Tutto è bene quel che finisce bene, io piu che altro me ne intendo di Mysql che c'ho lavorato molti anni sopra grazie al php. Il java invece lo sto iniziando a studiare da poco

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.