Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di JAEP
    Registrato dal
    Jan 2004
    residenza
    Treviso
    Messaggi
    421

    [Java] Eseguire più PreparedStatement

    Salve amici,
    vorrei far eseguire più PreparedStatement nella stessa servlet, in questo modo:

    codice:
    conn=null;
    try {
       Class.forName("com.mysql.jdbc.Driver");
       conn = DriverManager.getConnection(path);
       PreparedStatement pstmt = conn.prepareStatement("INSERT INTO utente VALUES(?,?,?,?,?)");
       pstmt.setString(1,null);
       pstmt.setString(2,request.getParameter("txtCognome"));
       pstmt.setString(3,request.getParameter("txtNome"));
       pstmt.setString(4,request.getParameter("txtProfessione"));
       pstmt.setString(5,request.getParameter("txtMail"));
       pstmt.executeUpdate();
    
       // Recupera l'ID dell'ultimo utente inserito
       int autoIncKeyFromApi = -1;
       ResultSet rs = pstmt.getGeneratedKeys();
       if (rs.next())
          autoIncKeyFromApi = rs.getInt(1);
       rs.close();
    		
    // SE INSERISCO QUESTA NUOVA  PreparedStatement HO I PROBLEMI!!!!!!
       pstmt.clearParameters();
       pstmt.execute("INSERT INTO appartiene VALUES(?,?,?,?)");
       pstmt.setInt(1,autoIncKeyFromApi);
       pstmt.setInt(2,1);
       pstmt.setInt(3,1);
       pstmt.setString(4,"ciao");
       pstmt.executeUpdate();
    			
    			
    
       conn.close();
    }
    catch(ClassNotFoundException cnfe) {
       out.println("Errore " + cnfe.getMessage());
    }
    catch(SQLException sqle) {
       out.println("Errore " + sqle.getMessage());
    }
    Se inserisco la seconda PreparedStatement ho il seguente errore:

    Errore Syntax error or access violation message from server: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?,?,?,?)' at line 1"

    Dov'è l'errore?????

    Grazie

  2. #2
    per me ti converrebbe definire la seconda PreparedStatement esattamente come hai definito la prima:
    pstmt = conn.prepareStatement("INSERT INTO appartiene VALUES(?,?,?,?,?)");
    e poi settargli i parametri e alla fine eseguirla: l'execute dovrebbe eseguire l'istruzione sql, che ovviamente non è valida
    23-08-2005: Udinese in cémpions lìg
    Questa estate l'ho passata a Tallin

  3. #3
    se vuoi eseguire più script SQL su di una sola connesione, deve predisporre il tutto in modo tale che la transazione SQL permetta esecuzione multipla di scriptSQL. Devi settare il valore commit a false.
    Questo è il codice:
    dopo aver creato l'oggetto Connection e aver caricato i driver del dbms corretti, scrivi: connectionObject.setAutocommit(false);

    dopo aver eseguito tutte gli sql script, scrivi connectionObject.commit();
    se manca questo metodo non eseguirai nessun sql multiplo


    Spero di essere stato chiaro......
    In caso contrario ti riposto meglio, magari con del codice....


  4. #4
    altra cosa importantissima.....
    tutti i flussi di I/O e quindi tutti i statement e preparedstatement e la connessione vanno chiusi sempre e comunque anche in caso di errori.

    Se qualcosa dovesse andare storto, nel catch va inserito il richiamo al metodo ROLLBACK......attraverso connectionObject.rollback();
    questo ultimo evita di lasciare il dbms in un stato non coerente o poco definito....riportanto il tutto allo stato precedente alla connessione

    per coriosità quale dbms utilizzi??????


  5. #5
    l'ultimo post fa un pò pena?????
    spero sia cmq chiaro

  6. #6
    Utente di HTML.it L'avatar di JAEP
    Registrato dal
    Jan 2004
    residenza
    Treviso
    Messaggi
    421
    Originariamente inviato da Dorcan82
    altra cosa importantissima.....
    tutti i flussi di I/O e quindi tutti i statement e preparedstatement e la connessione vanno chiusi sempre e comunque anche in caso di errori.

    Se qualcosa dovesse andare storto, nel catch va inserito il richiamo al metodo ROLLBACK......attraverso connectionObject.rollback();
    questo ultimo evita di lasciare il dbms in un stato non coerente o poco definito....riportanto il tutto allo stato precedente alla connessione

    per coriosità quale dbms utilizzi??????

    Come DBMS uso MySql.

    Il problema l'ho aggirato in questo modo

    codice:
    pstmt.clearParameters();
    pstmt = null;
    pstmt = conn.prepareStatement("INSERT INTO appartiene VALUES(?,?,?,?)");
    //...
    Adesso, non so quanto questo stratagemma sia funzionale, anche dal punto di vista delle prestazioni.....

    Un'altra cosa. Ma Come posso memorizzare la data odierna in un campo data di MySql???

    Ho provato così
    codice:
    java.util.Date oggi = new java.util.Date();
    pstmt.setDate(3,oggi);
    Ma Java mi ritorna un errore....

    Grazie a tutti

  7. #7
    il costruttore Date è deprecato sotto molti aspetti......
    esiste un Date sotto java.sql......
    Prova un pò......

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.