Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24

    [JSP/SQL] Insert su più tabelle

    Buongiorno a tutti,

    ho un problema che ormai mi perseguita da un paio di giorni ma che non riesco a risolvere.
    Premessa: sto sviluppando un online shop.
    La difficoltà è la seguente: fare dei insert su più tabelle, ovviamente legate tra loro nel database. Non ci sarebbero problemi se dovessi riempire ogni campo della tabella, ma nel mio caso in diversi stati riempi la tabella.
    Qualcuno ha un qualche consiglio da darmi?
    Spero di essermi spiegata.

    Di seguito metto i due insert presi in causa.
    Grazie in anticipo.
    Jasmine


    Statement stmtBox = null;
    ResultSet rsBox = null;
    stmtBox = conn.createStatement();

    int productId;
    productId = rsProd.getInt("id_Prod");
    //out.println(productId);
    String queryBox = "SELECT id_Prod, name, description, color, price FROM T_Product"
    + " WHERE id_Prod = " + productId;
    rsBox = stmtBox.executeQuery(queryBox);
    while(rsBox.next())
    {
    int prod = rsBox.getInt("id_Prod");
    //out.println(prod);
    String namePr = rsBox.getString("name");
    //out.println(namePr);
    String descr = rsBox.getString("description");
    //out.println(descr);
    String col = rsBox.getString("color");
    //out.println(col);
    Double pricePr = rsBox.getDouble("price");
    //out.println(pricePr);
    %>
    <tr>
    <td><% out.println(prod); %> <div align="left"></div></td>
    <td><% out.println(namePr); %><div align="left"></div></td>
    <td><% out.println(descr); %><div align="left"></div></td>
    <td><% out.println(col); %><div align="left"></div></td>
    <td><% out.println(quantity); %><div align="left"></div></td>
    <td><% out.println(pricePr); %> SFr</td>
    <td><% out.println(pricePr * quantity);%> SFr</td>
    </tr>
    <%
    // insert order in db
    String queryInsert = "INSERT INTO T_Order(id_Product,quantity,id_Client,orderDate) "
    + "VALUES (?,?,?,?)";
    try
    {
    Date date = new Date();
    String data = "data";
    PreparedStatement stmtInsert;
    stmtInsert = conn.prepareStatement(queryInsert);
    stmtInsert.setInt(1,prod);
    stmtInsert.setInt(2,quantity);
    stmtInsert.setInt(3,userId);
    stmtInsert.setString(4,data);//getDate());//new java.util.Date()); // new Date();
    stmtInsert.executeUpdate();
    stmtInsert.close();
    out.println("Order data inserted successfully.");
    }
    catch(SQLException ex)
    {
    out.println("Error during insertion in T_Order table");
    }
    // ho bisogno del numero di ordine
    // prima di inserire in orderItem
    String queryOrd = "INSERT INTO T_OrderItem(id_Prod,id_Ord) VALUES(?,?)";
    PreparedStatement stmtOrd = conn.prepareStatement(queryOrd);
    try
    {

    stmtOrd.setInt(1,productId);
    stmtOrd.setInt(2,4);//numero di ordine
    stmtOrd.executeUpdate();
    stmtOrd.close();
    out.println("OrderItem data inserted successfully.");
    }
    catch(SQLException ex)
    {
    out.println("Error during insertion in T_OrderItem table.");
    }

    }
    //}
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Non so se ho capito bene la difficoltà, ma provo a vedere se l'ho azzeccata:
    Hai una tabella in cui ciascun record non viene inserito tutto in una volta, ma riempito pian piano, in più passaggi (ad esempio, al passo 1 hai i primi 3 campi, poi altri 2, ecc.). Ho capito bene?

    Se è così la questione si risolve nel seguente modo:

    Al primo passaggio effettui una INSERT (popolando i campi di cui hai i dati). Nei passaggi successivi, non puoi più effettuare la INSERT (dato che il record esiste già), ma una UPDATE (aggiornamento: aggiorni il record inserito precedentemente con i nuovi valori).

    Era questo il problema?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    Esattamente, era proprio questo che intendevo.
    Ora cerco di mettere a posto.

    Grazie mille per la dritta!
    ciao ciao
    Jasmine

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    Problema parzialmente risolto.
    Ora è sopraggiunta l'impossibilità di effettuare i due semplici insert che avevo copiato nel messaggio precedente.

    Per caso sapresti quale potrebbe essere il disguido?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ti dà qualche messaggio di errore? E' un po' difficile, così, a naso...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    Il punto è proprio questo.
    Mi stampa l'errore che ho definito io nel catch.
    Sono degli insert molto semplici, ma proprio non riesco a capire il possibile errore in quanto nessun errore specifico viene riportato.
    Avrò controllato non so quante volte...

    ciaociao

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Allora modifica il catch.
    Invece di far stampare un tuo messaggio d'errore che non ti è sicuramente d'aiuto per capire la fonte dell'errore, usa ex.printStackTrace();.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    Ci avevo pensato pure io, ma... non mi stampa fuori niente!

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    24
    Ora ho provato con il metodo getSQLState().
    Mi da il seguente codice di errore: 23000.
    è già qualcosa

    ciaociao

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Puoi provare a stampare il valore ottenuto da ex.getMessage(). In questo modo:
    codice:
    <% out.println( ex.getMessage() ); %>
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2026 vBulletin Solutions, Inc. All rights reserved.