Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 39

Discussione: inserimento database

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    189

    inserimento database

    salve a tutti, volevo chiedervi una cosa piccolissima, in pratica io con questo codice seleziono da una tabella dei campi e li vado a inserire in un'altra tabella, che chiamo Newquantita. Questo funziona perfettamente....vorrei capire come mai se seleziono un campo da un'altra tabella diversa e lo inserisco nella stessa tabella Newquantita i valori nn li inserisce contemporaneamente ma succede una cosa del genere...


    1 0
    2 0
    3 0
    4 0
    5 0
    6 0
    7 0
    8 0
    0 1
    0 2
    0 3
    0 4 ecc

    ovvero prima mi va a inserire la prima colonna estratta e poi una volta che la inserisce tutta, procede a inserire l'altra....come faccio a farli inserire contemporaneamente?? in modo da avere

    1 1
    2 2
    3 3
    4 4
    5 5
    6 6

    codice:
    Statement s = con.createStatement(); 
    ResultSet rs = s.executeQuery("Select idricetta from Newricette"); 
    while(rs.next()){ 
    
    int valore1= rs.getInt("idricetta");
    String SQL = "INSERT INTO Newquantita (idricetta) VALUES (?)";
    
     PreparedStatement ps = con.prepareStatement(SQL);
    	
      ps.setInt(1, valore1);
          
     ps.execute(); 
    
     }
    
    // seconda tabella
    
    Statement s = con.createStatement(); 
    ResultSet r = s.executeQuery("Select idingrediente from Newingredienti"); 
    while(r.next()){ 
    
    int valore= r.getInt("idingrediente");
    String SQL = "INSERT INTO Newquantita (idingrediente) VALUES (?)";
    
     PreparedStatement p = con.prepareStatement(SQL);
    	
      p.setInt(1, valore);
          
     p.execute(); 
    
     }

  2. #2
    Una piccola premessa, che non vorrei considerassi offensiva, ma non si capisce assolutamente nulla di ciò che vorresti fare, per cui ti rispondo in base all'idea che mi sono fatto della cosa. Una insert crea un nuovo record nel DB, per cui non puoi effettuare due insert distinte, ma devi effettuare tutto in un'inica insert, sia l'inserimento dell'idricetta che dell'idingrediente.
    Ma il problema non è questo in quanto così come stai facendo tu recuperi in maniera disordinata gli idricette e gli idingrediente dalle rispettive tabelle e le inserisci nella tabella Newquantità senza la benchè minima connessione logica. Immagino tu voglia creare una tabella di relazione tra le ricette e gli ingredienti, ma così ottieni solo un gran casino.
    Necessitano quantomeno maggiori informazioni su ciò che devi praticamente fare.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    189
    si infatti mi esegue gli insert non contemporaneamente, ma separati.... si in pratica io devo crearmi un collegamento fra ricette e ingredienti.....facendo una selezione da 2 tabelle diverse, di 2 campi diversi che sono idricetta e idingredienti nel mio caso ,e andarli a mettere nella tabella newquantita.....ma devo fare in modo che vengano inseriti contemporaneamente nn prima un campo e poi l'altro....es

    tabella newquantita

    idricetta idingrediente
    01 11
    02 12
    03 13
    04 14
    05 ecc
    06
    07

  4. #4
    Com'è fatta la tabella Newingredienti, immagino vi sia una colonna che fa riferimento alla tabella delle ricette. In caso contrario come associ gli ingredienti alle ricette?
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da liga_87
    si infatti mi esegue gli insert non contemporaneamente, ma separati.... si in pratica io devo crearmi un collegamento fra ricette e ingredienti.....facendo una selezione da 2 tabelle diverse, di 2 campi diversi che sono idricetta e idingredienti nel mio caso ,e andarli a mettere nella tabella newquantita.....ma devo fare in modo che vengano inseriti contemporaneamente nn prima un campo e poi l'altro....es
    non ti offendere (e devo imparare a stare zitta, ma non riesco a trattenermi): stai usando l'approccio inverso a quello che di solito si fa (e satifal ha ragione).
    Hai i tuoi dati pronti e il tuo db (che non so se lo hai impostato bene o no) e da quello ne fai una copia mantenendo la struttura.

    Passo 1: definizione architettura database
    Passo 2: popolamento database, in genere una tabella alla volta.

    Se fatto bene il passo 1 il passo 2 è automatico.
    In generale la relazione avviene DOPO che hai creato il record. Mi spiego.
    Prima crei l'oggetto Ingrediente e lo inserisci e POI crei il legame con la ricetta (passando la chiave primaria di Ingrediente nella tabella Ricetta). Ma tu sei partito al contrario, hai la ricetta, inserisci l'ingrediente e poi controlli i duplicati (non oso pensare a come fai i controlli duplicati).

    Ci sono meccanismi in cui l'inserimento automatico con valori di default è possibile, ma si basa sulla chiamata (a te nascosta) del metodo di insert su una sola tabella, commit (e qui si può disquisire per giorni su questo commit) e poi fai l'insert della ricetta.

    Questo è un percorso logico che userei in base alle mie conoscenze e in base a quello che per anni ho studiato. E' un percorso semplice, lineare, che mi consente di riusare tutto quello che ho fatto e di capirlo (e perdi l'utilità del prepared statement se lo crei DENTRO ogni ciclo).

    A volte bisogna avere il coraggio di buttare quello che hai e rifare tutto con logica

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    189
    allora la tabella newingredienti e' composta da idingrediente e ingrediente,
    la tabella newricette e' composta da idricetta, nome, preparazione ecc.....
    la tabella di destinazione newquantita contiene i campi idingrediente e idricetta...., quindi io devo soltanto prendere gli id dalla prime 2 tabelle e andarli a inserire nella nuova tabella newquantita ...

  7. #7
    Come dice valia il tuo approccio al problema è errato. Prova a ragionare in termini differenti. Detto in maniera molto semplice tu hai giustamente una tabella ricette ed una tabella ingredienti, ora tra tra queste due tabelle cìè una relazione molti a molti in quanto una ricetta può avere (sicuramente) più ingredienti ed un ingrediente essere utilizzato in più ricette. Quindi è necessaria una tabella di relazione che ti premetta appunto di relazionare le altre due tabelle. Questa tabella di relazione avrà almeno 2 campi (idricetta, idingrediente).
    Per fare un esempio concreto:

    tabella ricette:
    id | nome | ...
    1 | Bruschetta | ...
    2 | Uovo sodo | ...
    ...

    tabella ingredienti:
    id | ingrediente
    1 | Pomodori
    2 | Olio
    3 | Origano
    4 ! Uova
    5 | Pepe
    6 | Rosmarino
    7 | Sale
    8 | Pane
    ...

    tabella di relazione:
    idricetta | idingrediente
    1 | 1
    1 ! 2
    1 | 3
    1 ! 7
    1 | 8
    2 | 4
    ...
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    189
    ecco questo e' quello che devo fare....hai capito perfettamente....il mio problema sta proprio nella tabella di relazione appunto...

  9. #9
    Ma quest'operazione (la creazione della tabella di relazione) andava fatta al momento dell'inserimento della ricetta. Ogni volta che inserisci una nuova ricetta devi effettuare gli opportuni inserimenti sulla tabella di relazione in modo che la ricetta appena inserita abbia i suoi ingredienti. Questa operazione non può essere fatta successivamente come vorresti ora fare tu. Come fai a sapere che una ricetta con un certo id ha detarminati ingredienti? E' un'operazione che dovresti fare a mano ormai per risistemare il tutto.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    il rivedere il database relazione glielo dico da quasi un mese, perché il problema di adesso nasce da una cattiva progettazione di base.
    Per farlo rapidamente è meglio farlo a mano, altrimenti arrivano pezzi di codice che si complicano la vita inutilmente

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.