2016-04-09 10 views
1

Ich schreibe eine Anwendung, die Profilbilder von Benutzern in einer MySQL-Datenbank speichert Speichern der Image-URL in der Datenbanktabelle als Varchar-WerteWiederherstellen der URL in der MySQL-Datenbank gespeichert

Hier ist das Problem: Wenn ich versuche, die URL mit ResultSet.getURL() -Methode oder sogar resultSet.getString(). Ich bekomme eine MalformedURLException - "Protokoll: C nicht erkannt". Wie löse ich das bitte helfen.

Hier ist mein Code;

try { 
     sqlConnectionObject = DriverManager.getConnection(jdbcUrl,"root",""); 
    } catch (SQLException ex) { 
     Logger.getLogger(Androbot.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    fileChooser = new JFileChooser(); 
    FileFilter fileFilter = new FileNameExtensionFilter("pic", "jpg"); 
    fileChooser.addChoosableFileFilter(fileFilter); 

    obtainURLFromDBButton.addActionListener(
      new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent event) { 
      try { 
       JOptionPane.showMessageDialog(null, obtainImageUrl("userName")); 
       File file = new File(obtainImageUrl("userName").toString()); //the obtain image url 
                      //function is called here 
                      //and passed to File 
                      //file is used to creat image 
       Image img = ImageIO.read(file); 
       thisButton.setIcon(new ImageIcon(img)); 
      } catch (FileNotFoundException e) { 
       JOptionPane.showMessageDialog(null, "ERROR" + e.getMessage()); 
      } catch (IOException e) { 
       JOptionPane.showMessageDialog(null, "ERROR" + e.getMessage()); 
      } 
     } 
    } 
    ); 

//Allows user to set profile 
    addImagButton.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent event) { 
      int ret = fileChooser.showDialog(null, "Add Profile Picture"); 
      if (ret == JFileChooser.APPROVE_OPTION) { 
       // fileChooser.getSelectedFile().getPath(); 
       try { 
        // file = new File("C:\\Users\\user\\Pictures\\EmmaBeib\\12553040_133350150376029_4407158756206009973_n.jpg"); 
        String fileUrl = fileChooser.getSelectedFile().getPath(); 
        JOptionPane.showMessageDialog(null,"URL = "+fileUrl); 
        addURLRow("userName", fileUrl); 
        image = ImageIO.read(fileChooser.getSelectedFile()); 

        addImagButton.setIcon(new ImageIcon(image)); 
        // addPictureToDB(fileChooser.getSelectedFile()); 
       } catch (FileNotFoundException e) { 
        System.err.println(e); 
       } catch (IOException e) { 
        System.out.println(e); 
       }catch(SQLException e){ 
        JOptionPane.showMessageDialog(null,"ERROR"+e.getMessage()); 
       } 

      } else if (ret == JFileChooser.CANCEL_OPTION) { 
       int opt = JOptionPane.showConfirmDialog(null, "Apopprove cancel?", "", JOptionPane.OK_CANCEL_OPTION); 
       if (opt == JOptionPane.CANCEL_OPTION) { 
        fileChooser.showDialog(null, "Add Profile Picture"); 
       } 
      } else if (ret == JFileChooser.ERROR_OPTION) { 
       JOptionPane.showMessageDialog(null, "An ERROR occured try again later"); 

      } 
     } 
    } 
    ); 

//Obtain picture from the database 
public Object obtainImageUrl(String userName) throws MalformedURLException { 
    try (Connection connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/picturedb", "root", "")) { 
     Statement mysqlStm = connect.createStatement(); 
     String SELECT_QUERY = "SELECT * FROM picture WHERE userName IN ('" + userName + "');"; 
     ResultSet cursor = mysqlStm.executeQuery(SELECT_QUERY); 
     while (cursor.next()) { 
      imageUrl = cursor.getObject("picUrl"); 
     } 
     URL url = new URL(imageUrl.toString()); 
     // File imageFile = new File(imageUrl); 
     try { 
      Image img = ImageIO.read(url); 

     } catch (IOException ex) { 
      JOptionPane.showMessageDialog(null, "ERROR" + ex.getMessage()); 
     } 

    } catch (SQLException e) { 
     JOptionPane.showMessageDialog(null, "ERROR" + e.getMessage()); 
    } 
    return imageUrl; 
} 
//insert image url in the db 
public void addPictureToDB(File file) { 
    imageUrl = file.getAbsolutePath(); 
    try (Connection connect = DriverManager.getConnection(jdbcUrl, "root", "")) { 
     Statement mysqlStmt = connect.createStatement(); 
     String INSERT_QUERY = "INSERT INTO picture VALUES('" 
       + imageUrl + "','" 
       + "BETTY KIPPO');"; 
     mysqlStmt.execute(INSERT_QUERY); 
     JOptionPane.showMessageDialog(null, "Image Added Succefully"); 
    } catch (SQLException e) { 
     JOptionPane.showMessageDialog(null, "ERROR" + e.getMessage()); 
    } 
} 
+0

Die Fehlermeldung scheint darauf hinzuweisen, dass Sie den Speicherort einer Datei als absoluten Pfad für eine lokale Datei speichern, z. B. 'C: \ folder \ ...'. Wenn dies der Fall ist, sollten Sie sie wahrscheinlich nicht als URL betrachten, speichern Sie sie einfach in der Datenbank als VARCHAR und arbeiten Sie mit ihnen als String-Werte. –

+0

... sollten Sie auch die 'PreparedStatement'-Objekte und * parametrisierten Abfragen * lesen, um das dynamische SQL in Ihrem Code zu ersetzen. –

Antwort

0

Durch Forschung und Experimentation, meine Ergebnisse sind, dass, wenn ich die

JFileChooser fileChooser = new JFileChooser(); 
fileChooser.getSelectedFile().getPath().toString(); 

auf diese Weise die Pfadzeichenfolge zu der Datenbank

verwenden gültige URL gesendet und ich brauche also nicht um das Protokoll zu ändern bin mit onRetrieve.

+0

Dateiauswahl gibt Ihnen den tatsächlichen Dateipfad in der Zeichenfolgendarstellung –