Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    13

    Ciclo while(rs.next()){st.executeUpdate("...")} si interrompe alla prima iterazione

    signori ho una pagina .jsp che presi dei campi da un form deve aggiornare lo stesso campo nella stessa tabella su X righe. ho buttato giu questo codice:

    Codice PHP:
    <%@page import="java.sql.*"%>
    <%@
    page import="java.sql.*"%>
    <%@ 
    page language="java" contentType="text/html; charset=ISO-8859-1"
        
    pageEncoding="ISO-8859-1"%>
        
    <%
    //Per prima cosa controllo che l'utente abbia effettivamente i diritti di cambiare password altrimenti lo rimando alla home
        
    String tipologiaProfilo = (String)session.getAttribute("tipologiaProfilo");
        if(
    tipologiaProfilo == null || !tipologiaProfilo.equals("addetto amministrativo")){
            
    response.sendRedirect("http://localhost:8080/progBDE/index.jsp");
        } 
    //fine verifica
    %>
    <%
        
    //inizializzo le variabili get e post
        
    String codiceVendita        request.getParameter("codVendita");
        
    String capacita                request.getParameter("capacita");
        
    String numeroBottiglie         request.getParameter("numeroBottiglie");
        
    String codiceVino            request.getParameter("vino");
        
        
    //faccio il parsing a int di numeroBottiglie per fare il confronto
        
    int numBottScelto             Integer.parseInt(numeroBottiglie);
        
        
    //dichiarazione variabili
        
    int bottiglieDisponibili     0;
        
    int numeroBottiglieVendita     0;
        
    int count 0;
        
    int codiceBott 0;%>
        
        <%
        
        try{        
            Class.
    forName("com.mysql.jdbc.Driver");
            
    Connection con DriverManager.getConnection("jdbc:mysql://localhost/progbde""root""coinisin");
            
    Statement st con.createStatement();

    //cerco la quantità effettivamente disponibile di bottiglie di quel vino e di quella capacità
    ResultSet rs st.executeQuery("SELECT count(b.codiceBottiglia) FROM imbottigliamento as i, bottiglia as b WHERE i.codiceImbottigliamento = b.codiceImbottigliamento and b.vendita is null and i.codiceVino ='"+codiceVino+"' and b.capacita ='"+capacita+"' group by i.codiceVino");
    //controllo che la capacità delle bottiglie sia stata specificata bene altrimenti rimando al form
    if(!rs.first()){response.sendRedirect("http://localhost:8080/progBDE/panel/addAmmin/inserisciBottiglieVendita.jsp?codVendita="+codiceVendita+"&err=1");}
     
    bottiglieDisponibili rs.getInt(1);
            
    if(
    numBottScelto bottiglieDisponibili ){response.sendRedirect("http:localhost:8080/progBDE/panel/addAmmin/inserisciBottiglieVendita.jsp?codVendita="+codiceVendita+"&err=2");}
            
        }
        catch(
    SQLException e){ e.printStackTrace();}
        catch(
    ClassNotFoundException e) { e.printStackTrace();}
        
        
        
        try{        
            Class.
    forName("com.mysql.jdbc.Driver");
            
    Connection con DriverManager.getConnection("jdbc:mysql://localhost/progbde""root""coinisin");
            
    Statement st con.createStatement();
        
            
            
    //prima trovo i codiceBottiglia delle bottiglie di quel vino e di quella capacità
    ResultSet lista st.executeQuery("SELECT b.codiceBottiglia FROM bottiglia as b, imbottigliamento as i WHERE i.codiceVino='"+codiceVino+"' and i.codiceImbottigliamento = b.codiceImbottigliamento and b.vendita is null and  b.capacita ='"+capacita+"' LIMIT "+numBottScelto+"");
    //inserimento della vendita alla bottiglia (update del campo vendita in bottiglia)
            
    (****->)while(lista.next()){
                
    codiceBott lista.getInt(1);
            
    int ins st.executeUpdate("UPDATE bottiglia SET vendita='"+codiceVendita+"' WHERE codiceBottiglia='"+codiceBott+"'");
    out.println(" codiceBott : "+codiceBott+"
    "
    );
            }
        
        
    //trovo la quantita di bottiglie della vendita
        
    ResultSet rs3 st.executeQuery("SELECT numeroBottiglie FROM vendita WHERE codiceVendita='"+codiceVendita+"'");
        
    rs3.next();
        
        
    numeroBottiglieVendita rs3.getInt(1);
        
    numeroBottiglieVendita numeroBottiglieVendita+numBottScelto;
        
    out.println("
    numeroBottiglieVendita: "
    +numeroBottiglieVendita+"
    "
    );
        
    st.executeUpdate("UPDATE vendita SET numeroBottiglie='"+numeroBottiglieVendita+"' WHERE codiceVendita='"+codiceVendita+"'");
        

    }
    catch(
    SQLException e){ e.printStackTrace();}
    catch(
    ClassNotFoundException e) { e.printStackTrace();}



        %>
        <%
        
    //redirect alla pagina di riepilogo della vendita
        
    response.sendRedirect("http://localhost:8080/progBDE/panel/addAmmin/riepilogoVendita.jsp?codVendita="+codiceVendita+"");
            
        
    %> 
    in pratica il
    Codice PHP:
    while(lista.next()) 
    che dovrebbe scorrere i codiceBott e con quelli eseguire la query di update ad ogni iterazione un diverso codiceBott esce alla prima iterazione!. se provo a togliere l'istruzione executeUpdate e faccio solo un
    Codice PHP:
    out.println(codiceBott); 
    me li stampa tutti , solo con l'istruzione executeUpdate si blocca alla prima iterazione.

    Avete qualche suggerimento per farlo funzionare? un altro modo per fare la stessa cosa?

    vi ringrazio gia da ora

  2. #2
    Molto probabilmente viene generata un'eccezione, qualcosa non va a buon fine col l'update del database. Prova a controllare la console e vedere di che tipo di eccezione si tratti.

  3. #3
    quando si deve eseguire una certa istruzione sql per un tot numero di volte, cambiando però al suo interno i parametri contenuti, si usa il PreparedStatement, che di solito viene preferito ad uno Statement normale quando si hanno dei parametri.

    prova ad usare un PreparedStatement e, se l'errore persiste, vedremo cosa fare.
    I miei esempi in Java qui: http://cdpjavaexamples.altervista.org/index.html

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    13
    il problema persiste anche con il preparedStatement comunque ho risolto chiamando in while(lista.next()) una stored procedure che si occupa semplicemente di fare l'aggiornamento ricevendo il codiceBott e il codiceVendita

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.