Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    94

    [Java]Eliminare tupla da tabella in DB

    Ciao a tutti...non so più dove sbattere la testa!!! Sto cercando di eliminare una tupla(riga) da una tabella nel Database che ho creato in oracle. Ero un po' indecisa se scrivere qui o nella sezione Database perchè l'errore restituito è un'eccezione SQL...spero di aver fatto la scelta giusta scrivendo qui!!
    Allora non posto tutto il codice perchè è troppo lungo, in pratica su questa tabellina Libro da un'interfaccia Java faccio di tutto, ricerca (per ogni attributo), modifica (di ogni attributo), inserimento e sto tentando di fare l'eliminazione di una tupla.
    Cerco la tupla e il tutto va a buon fine, quando arriva il momento di eliminarla viene generata l'SQLexception:

    ErrorCode=1722
    Message=ORA-01722: invalid number
    SQL state= 42000

    Ho cercato di capire a cosa fa riferimento questo errore, ma ho trovato che riguarda un tentativo di conversione da Stringa a number (una cosa del genere)....cosa c'entra con l'eliminazione!!!!


    Vi copio il pezzettino di codice (l'uso di execute() e non executeUpdate() è una preferenza del prof solo per l'eliminazione, ovviamente ho provato anche con executeUpdate() e non cambia nulla):


    codice:
    ...................................................
    Statement s;
    String cmd;
    
    cmd = "delete from " + Database.schema + "." + nomeTabella
          + " where libro_id="+tCodice.getText();
    
    try {    
    s = mycon.createStatement();
    s.execute(cmd);
    
    } catch (SQLException e) {
      mostraErrori(e);
      return false;
    } 
    ............................
    Vi ringrazio mille per l'aiuto

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    539
    "invalid number", hai la certezza che "tCodice.getText()" ti restituisca un valore numerico ?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    94
    Quote Originariamente inviata da marino51 Visualizza il messaggio
    "invalid number", hai la certezza che "tCodice.getText()" ti restituisca un valore numerico ?
    Allora ho controllato cosa restituisce tCodice.getText(), ti spiego

    l'attributo nella tabella libro_id è dichiarato VARCHAR2 perchè l'id del libro non sempre è solo numerico, ma può contenere anche caratteri, ad esempio potrebbe essere settatao a '8924794497' , ma anche a BL82J12370';

    tCodice.getText() mi restituisce una stringa, ho provato sia a metterla in una variabile String codice = tCodice.getText() e a stampare, sia a passare direttamente la variabile al comando sql.

    Io ho controllato che VARCHAR2 corrisponde al tipo String in Java, infatti con inserimento, modifica e ricerca non ho avuto problemi.
    Pensi sia questa stringa il problema?!!
    Ci devo riflettere su

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da haidi8 Visualizza il messaggio
    Pensi sia questa stringa il problema?!!
    Ci devo riflettere su
    Non hai pensato alla "quotatura" nella query:

    " where libro_id="+tCodice.getText();

    Avresti es.

    where libro_id=BL82J12370

    che non è SQL corretto. (EDIT: anzi sì tecnicamente è corretto ma presuppone che esista un campo BL82J12370 !)

    Per questo motivo (e altri), si dovrebbe usare un PreparedStatement ... non un normale Statement.
    Ultima modifica di andbin; 20-06-2015 a 15:22
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    94
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Non hai pensato alla "quotatura" nella query:

    " where libro_id="+tCodice.getText();

    Avresti es.

    where libro_id=BL82J12370

    che non è SQL corretto.

    Per questo motivo (e altri), si dovrebbe usare un PreparedStatement ... non un normale Statement.
    In verità ci ho pensato ad un PreparedStatement, ma non credevo mi potesse aiutare in questo tipo di problema...ma da quello che scrivi mi sbagliavo di grosso, ci provo subito grazieeee

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    94
    Funzionaaaaaa grazie grazie grazie!!!!!!!!!! Spiego i dettagli, magari può servire a qualcuno

    Allora, come consigliato da andbin, invece di usare Statement ho usato PreparedStatement, in questo modo:

    codice:
           PreparedStatement ps;
           String id=tCodice.getText();
    
           ps =mycon.prepareStatement (cmd, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
           ps.setString(1,id);
           
           ps.execute();   //attenzione qui inizialmente avevo messo ps.execute(cmd) ma è sbagliato passare cmd
    Grazieeeeeeeeeeee

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.