Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Aggiornamento Campo

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    88

    Aggiornamento Campo

    Ciao a tutti...
    innanzitutto volevo spiegare che è soltanto da pochi mesi che mi sono addentrato nel mondo della programmazione “JAVA”, e soltanto da pochi giorno che studio le sessioni. Adesso il mio problema è quello di far in modo, che io utente, aggiorni un campo di un altro utente.. Quest'ultimo deve essere recuperato mediante un campo che io ho chiamato destinatario.

    Credo proprio che l'errore sta nella query sql. (Infatti se ho sbagliato sezione please).Ciò che mi rende perplesso e che questa stessa query, nel MYSQL Query Browser settando io l'utente da aggiornare e il campo funziona correttamente, mentre poi quando vado a implementare il codice mi genera un'eccezione.


    Internal Exception: java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
    Error Code: 0
    Call: UPDATE Utenti set messaggi = '1' where nickname like 'Prova'
    Da quel che vedo però, sia il numero dei messaggi che il nickname “destinatario” lo prende correttamente, soltanto che dopo va ad aggiornare il mio campo messaggi e non quello di salvo.

    Uso EJB3, il codice che ho fatto è:


    public Utenti findPosta(Utenti utente) {

    String nome = utente.getDestinatario();

    //Query query = em.createQuery("update object(o) from Utenti as o set o.messaggi='" + utenti.getMessaggi() + "' as o where o.nickname like ='" + nome + "'");
    Query query = em.createNativeQuery("UPDATE Utenti set messaggi = '"+ utente.getMessaggi() +"' where nickname like '" + nome + "'");
    Utenti u = null;

    try {

    u = (Utenti) query.getResultList();
    } catch (Exception errorePosta) {
    System.out.println("Si è verificato un problema con la posta");
    errorePosta.printStackTrace();
    }

    //Ritorno dell'utente
    return u;
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    penso che tu stia provando a fare qualcosa di diverso da una SELECT con executeQuery... UPDATE/INSERT/DELETE vogliono executeUpdate
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    88

    ...

    Hmm boh non credo però che il problema sia quello, perchè comunque mi aggiunge nel database, ma non nell'utente "destinatario" ma bensi nel mio...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    88

    ^^

    Ehi avevi ragione tu, dovevo fare una executeUpdate(); ora funziona tutto.

    Però ho un altro dubbio !!! allora io utente, digito il destinatario e aggiorno il campo di quest'ultimo “messaggi”, incrementandolo di uno. Il valore di default di questo campo ovviamente è o.

    Adesso però cosa succede, il campo del destinatario “messaggi” è diventato uno, supponiamo che ricompilo il modulo, reinserisco lo stesso destinatario, e il campo messaggi da 1 deve diventare 2...ed ecco il problema.

    Non basta fare:

    int incrementaMessaggi = 0;
    ++incrementaMessaggi;

    String istruzione = "UPDATE Utenti set messaggi = '" + incrementaMessaggi + "' WHERE nickname LIKE '" + destinatario + "'";

    Così non va bene...perchè è normale che il campo resta sempre a 1, in quanto ogni qualvolta che eseguo questa query, il campo incrementaMessaggi partirà da 1. Come potrei fare? Serializzare la variabile ?...non c'è un modo più semplice?Magari incrementando il campo sempre attraverso la query?

    Grazie ancora.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non so se ti rispondo, forse non afferro il problema... comunque, nulla vieta di fare una UPDATE così

    codice:
    UPDATE tabella SET campo = campo + 1 WHERE altro_campo = valore
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    88

    Avevo provato

    Così avevo già provato...soltanto che il valore del campo messaggi resta sempre fermo a 1.


    String destinatario = utente.getDestinatario();
    Integer messaggi = utente.getMessaggi();

    String istruzione = "UPDATE Utenti set messaggi = '" + messaggi +1 + "' WHERE nickname LIKE '" + destinatario + "'";
    La mia query infatti era stata fatta così, string destinatario ovviamente vado a recuperarmi il destinatario che inserisco nel form e che quindi viene salvato nel db.

    Il problema continua ad esistere: il valore di default del campo messaggi è 0, allora cosa succede...

    supponiamo che incrementi il campo dell'utente pippi, questo campo da 0 diventa 1, se ricompilo il form e come destinatario rimetto pippi, il campo resta sempre 1 senza incrementare e quindi diventare 2.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    scusa, ma vuol dire che tu in qualche maniera re-inizializzi la tua tabella o il record ogni volta... invece non si deve fare: al primo insert, quando crei l'utente, si avranno i parametri di default lì dove previsti... dopodiché ti devi scordare dell'inizializzazione. Se hai messo le due logiche (creazione e gestione) insieme, sbagli! Separare subito
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    88

    ...

    Si, ci siamo l'inizializzazione non devo farla...però devo almeno chiamare il campo messaggi !!! Infatti ho fatto come mi hai detto:

    String istruzione = "UPDATE Utenti set messaggi = '" + utente.getMessaggi() +1 + "' WHERE nickname LIKE '" + destinatario + "'";

    Questa è la query, però continua a darmi il solito problema...

    Non posso mettere semplicemente campo = campo, in quanto poi il compilatore giustamente si lamenta perchè vuole la creazione del campo messaggi...

    Capisci cosa voglio dire?...

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    No
    non capisco, più che altro temo che ti stia incasinando la vita per non usare SQL come si deve... facciamo prima, posta la struttura della tabella e le operazioni che ci devi fare...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    88

    eheheh

    Si infatti...mi sa che mi sto complicando la vita anche a spiegarti il problema:P.

    Allora partiamo dal presupposto che uso EJB3...poi ho una tabella, all'interno della tabella ci sono i seguenti campi:

    nome, destinatario, titolo, testo, messaggi

    ho un form html, vi è la sessione, quindi il nome lo prende in base al login che è stato eseguito, compilo questo form, e inserisco destinatario, titolo e testo.

    Supponiamo che io sia l'utente Pippo, e nel database vi è anche l'utente Pluto, io Pippo come destinatario inserisco Pluto, quindi nel momento in cui clicco su invia , il campo messaggi di Pluto deve diventare 1. Ricompilo il form, come destinatario rimetto Pluto, quindi il campo messaggi da 1 deve diventare due.

    Allora nell'sql ovviamente, per dire di aggiornare il campo messaggi del destinatario che ho inserito faccio:

    "UPDATE Utenti set messaggi = '" + utente.getMessaggi() +1 + "' WHERE nickname LIKE '" + destinatario + "
    quindi il destinatario lo recupero da:

    String destinatario = utente.getDestinatario();...
    cosa succede, nel campo messaggi viene aggiunto 1 in quanto ho inserito:

    + utente.getMessaggi() +1 +, tuttavia però se reinserisco lo stesso destinatario, il campo messaggi di quest'ultimo resta a 1...

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.