Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Controllo inserimento dati su Database

    Situazione: applicazione java > mysql

    Vorrei fare dei controlli sui dati che vengono inseriti quando si aggiunge o modifica un record.
    Banalmente tabella utenti, se inserisco un nome utente uguale dovrebbe restituire "utente già presente"
    per fare questo avevo pensato di eseguire:
    -query SELECT * FROM TABELLA WHERE NOME = ? AND COGNOME = ?
    -se rs.next() é falso posso procedere all'inserimento.

    Potrebbe funzionare? oppure ci sono strade migliori ed alternative?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: Controllo inserimento dati su Database

    Originariamente inviato da 1000niumbug
    Situazione: applicazione java > mysql

    Vorrei fare dei controlli sui dati che vengono inseriti quando si aggiunge o modifica un record.
    Banalmente tabella utenti, se inserisco un nome utente uguale dovrebbe restituire "utente già presente"
    per fare questo avevo pensato di eseguire:
    -query SELECT * FROM TABELLA WHERE NOME = ? AND COGNOME = ?
    -se rs.next() é falso posso procedere all'inserimento.

    Potrebbe funzionare? oppure ci sono strade migliori ed alternative?
    può anche funzionare, ma che fai nei casi di omonimia?
    Non è difficile che due persone abbiano lo stesso nome (sapessi in quante hanno il mio)
    RTFM Read That F*** Manual!!!

  3. #3

    Re: Re: Controllo inserimento dati su Database

    Originariamente inviato da valia
    può anche funzionare, ma che fai nei casi di omonimia?
    Non è difficile che due persone abbiano lo stesso nome (sapessi in quante hanno il mio)
    Si, quello é da valutare, ma é un esempio generico, magari una tabella utente avrà il campo user che necessariamente dovrà essere diverso, fosse una tabella anagrafica posso aggiuingere AND... boh codice fiscale.

    Mi chiedevo se é necessario fare una SELECT preventiva dal DB portarla in "JAVA" (che brutto termine ) controllarla e poi verificato il set di record con rs.next() se falso procedere.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    Re: Re: Re: Controllo inserimento dati su Database

    Originariamente inviato da 1000niumbug
    Si, quello é da valutare, ma é un esempio generico, magari una tabella utente avrà il campo user che necessariamente dovrà essere diverso, fosse una tabella anagrafica posso aggiuingere AND... boh codice fiscale.

    Mi chiedevo se é necessario fare una SELECT preventiva dal DB portarla in "JAVA" (che brutto termine ) controllarla e poi verificato il set di record con rs.next() se falso procedere.
    Esatto. Parlando in generale: se non vuoi duplicati, fai una ricerca con quei parametri, se la ricerca è vuota, inserisci.

    Puoi decidere se fare tu direttamente (lato java) il controllo, o impostarlosu db (con degli indici in pratica).
    Vedi in base al db che hai come impostare la cosa.
    RTFM Read That F*** Manual!!!

  5. #5
    Quindi il controllo su dati inseriti é ok con query preventiva. Ottimo Invece supponendo di avere un form con nome cognome data di nascita etc etc il controllo sui tipi di dato inseriti nelle text area lo eseguo direttamente dalla jTextArea e se sono numeri con un bel casting dove opportuno..

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da 1000niumbug
    Quindi il controllo su dati inseriti é ok con query preventiva. Ottimo Invece supponendo di avere un form con nome cognome data di nascita etc etc il controllo sui tipi di dato inseriti nelle text area lo eseguo direttamente dalla jTextArea e se sono numeri con un bel casting dove opportuno..
    in realtà molto spesso ti basta anche un textfield.
    Ci sono vari modi per poter fare questo controllo, l'ideale è un istante prima di fare salva, assicurarti che tutto sia stato inserito come vuoi.

    Eviterei i cast (non si programma basandoci sulla non presenza di una castexception), ma esiste anche la possibilità di "personalizzare" i campi, in modo da ricevere solo interi (o un pattern da te escelto): guarda qualcosa come i numerictextfield (ora non ricordo il nome esatto).

    java uguale: jxdatepicker implementa già quello che a te serve
    RTFM Read That F*** Manual!!!

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se posso, aggiungerei che il "controllo" con la SELECT è ridondante (utile e dà maggior sicurezza, ma ridondante, se si tratta solo di controllare la presenza o meno del record prima di inserire).

    Se cerchi di inserire un record la cui chiave è già presente nella tabella, semplicemente l'inserimento andrà male da solo, senza bisogno della SELECT. In tal caso, l'executeUpdate() ritorna 0: ovvero, 0 record sono stati inseriti/modificati.

    Quindi, potrebbe essere "sufficiente" tentare direttamente l'INSERT e valutare solo il valore di ritorno:

    codice:
    String sql = "INSERT ... INTO ...";
    Statement stmt = con.createStatement();
    int numRecord = stmt.executeUpdate( sql );
    if (numRecord > 0) {
       // Ok, il record è stato inserito
    } else {
       // Il record era già presente o si sono verificati altri errori
    }
    Questa è una delle tecniche utilizzate per l'ottimizzazione degli accessi a DB, quando si ha a che fare col noto problema "insert or update". L'approccio standard sarebbe questo:

    1) Faccio una SELECT per sapere se il record c'è.
    2) Se c'è faccio una UPDATE, se non c'è faccio una INSERT

    Risultato: faccio sempre e comunque 2 query, quindi 2 accessi al DB... di cui uno sarebbe perfettamente inutile.

    Approccio ottimizzato:

    1) Faccio la INSERT
    2) Se la INSERT è andata a buon fine ho finito, altrimenti faccio un'UPDATE

    Nel caso peggiore faccio sempre 2 query, ma nel caso migliore ne faccio solo una.


    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
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da LeleFT
    Se posso, aggiungerei che il "controllo" con la SELECT è ridondante (utile e dà maggior sicurezza, ma ridondante, se si tratta solo di controllare la presenza o meno del record prima di inserire).
    certo che puoi!!
    Allora il tuo approccio funziona se tu conosci la chiave, se tu la chiave non la conosci a priori non puoi.
    Se la tua chiave è un userID (intero) autoincrement, se inserisci leleFt 2 volte, nessuno si arrabbia perché in pratica sono due record differenti.
    Se hai specificato degli indici (a livello di tabella) tipo

    codice:
    ALTER TABLE tbl ADD UNIQUE INDEX id_unq (cmp_1, cmp_2, .., cmp_n);
    allora hai pienamente ragione, la insert ti va bene.
    RTFM Read That F*** Manual!!!

  9. #9
    Si, in effetti se avessi la chiave primaria autoincrementale, l'insert crea due record identici tranne che per il campo chiave primaria..

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da 1000niumbug
    Si, in effetti se avessi la chiave primaria autoincrementale, l'insert crea due record identici tranne che per il campo chiave primaria..
    chiave auto-incrementale = numero.
    Quando fai insert, tu non dici che valore ha sto campo.
    Per i dumplicati devi usare l'index
    RTFM Read That F*** Manual!!!

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.