[JAVA] problema con inserimento delle immagini nel DB
Devo sviluppare un programma che in un certo punto consenta di caricare foto in un db. Ora al db passo la path dell'immagine (che arriva corretta fino al DAO) ma quando viene inserita nel db quest'ultimo mi mangia gli "\" e inserisce un percorso che non contiene "\" e di conseguenza non trova la foto. Secondo voi da cosa dipende? Sapreste darmi un consiglio per risolvere?
Posto il codice pulito dai vari controlli:
Listener
ProdottoBusiness
FotoDAO
Se ad esempio la foto si trova nel percorso "C:\Users\Io\Desktop\foto.png", nel db mi viene inserito "C:UsersIoDesktopfoto.png"
Posto il codice pulito dai vari controlli:
Listener
[...] if(e.getActionCommand()=="sfoglia"){ JFileChooser jFileChooser = new JFileChooser(); jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("File Immagine", "jpg", "png")); int userSelection = jFileChooser.showSaveDialog(finestra); if (userSelection == JFileChooser.APPROVE_OPTION) { File file = jFileChooser.getSelectedFile(); String path = file.getAbsolutePath(); lblPath.setText(path); } } if(e.getActionCommand()=="Aggiorna"){ Prodotto prodotto = (Prodotto) SessionManager.getInstance().getSESSION().get("prodottoSelezionato"); String path = lblPath. boolean aggiorna = ProdottoBusiness.getInstance().aggiornaProdotto(prodotto.getIdProdotto(), txtNome,Float.parseFloat(txtPrezzo), Disponibile , idCategoria, txtDescrizione,Float.parseFloat(txtPercSconto) , idProduttore,idDistributore,path); [...]
ProdottoBusiness
[...] public boolean aggiornaProdotto(int idProdotto, String nome, float prezzo, boolean disponibile, int idCategoria,String descrizione, float percSconto, int idProduttore, int idDistributore, String pathFoto) { Codice codice= ProdottoDAO.getInstance().aggiornaProdotto(idProdotto, nome, prezzo,disponibile, idCategoria, descrizione, percSconto, idProduttore, idDistributore); if(codice==Codice.NESSUN_ERRORE){ codice = FotoDAO.getInstance().aggiornaFoto(idProdotto,pathFoto); if(codice!=Codice.NESSUN_ERRORE) return false; } return true; } [...]
FotoDAO
[...] public Codice aggiornaFoto(int idProdotto, String pathFoto) { try { DbConnection.getInstance().eseguiAggiornamento("UPDATE foto SET Foto='"+pathFoto+"'" + " WHERE Prodotto_idProdotto='"+idProdotto+"'"); return Codice.NESSUN_ERRORE; } catch (AggiornamentoFallitoExpection aggiornamentoFallitoExpection) { return Codice.ERRORE_SCONOSCIUTO; } } [...]
Se ad esempio la foto si trova nel percorso "C:\Users\Io\Desktop\foto.png", nel db mi viene inserito "C:UsersIoDesktopfoto.png"
Risposte
Credo che il problema sia legato al fatto che "\" è spesso usato come escape character e viene quindi interpretato in modo particolare. Puoi sostituire ogni "\" con "\\" oppure (strategia consigliata) fare uso di stored procedure. La principale ragione per preferire la seconda soluzione riguarda il fatto che le stored procedure sono immuni a certi tipi di attacchi (sql injection per esempio) per cui il tuo metodo è invece vulnerabile.