2016-07-08 6 views
-1

Ich habe Code für JButton geschrieben, um ausgewählte Dateien auf einem JTable aus der MySQL-Datenbank dargestellt herunterladen. Ich möchte, dass alle ausgewählten Dateien heruntergeladen werden. Anfangs konnte ich jeweils eine Datei herunterladen. Jetzt habe ich den Code bearbeitet und es tut nichts und gibt keinen Fehler zurück. Was könnte im Code falsch sein?Wählen Sie mehrere Dateien auf JTable und laden Sie sie aus der MySQL-Datenbank

Wie kann ich dies in meinem Code erreichen?

Mein Code:

private void jButtonDownloadActionPerformed(java.awt.event.ActionEvent evt) { 

    int BUFFER_SIZE = 4096; 

    try { 
     int[] selected_rows= jTable1.getSelectedRows(); 
     for (int i = 0; i < selected_rows.length; i++){ 
      if (i < selected_rows.length - 1) { 
     String tableClick=(jTable1.getModel().getValueAt(selected_rows[i],i).toString()); 
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/employee_certificate","root",""); 
     String sql= "SELECT Cert, Cert_Name FROM certificate WHERE Cert_Code =?" ; 
     PreparedStatement pstmt = con.prepareStatement(sql); 
     pstmt.setString(1, tableClick); 
     ResultSet rs=pstmt.executeQuery(); 
     if(rs.next()){ 
      String filename = rs.getString("Cert_Name"); 
      Blob blob = rs.getBlob("Cert"); 
      InputStream inputStream = blob.getBinaryStream(); 
      String filePath ="C:\\Users\\User\\Downloads\\Documents\\"+filename; 
      OutputStream outputStream = new FileOutputStream(filePath); 

      int bytesRead = -1; 
      byte[] buffer = new byte[BUFFER_SIZE]; 
      while ((bytesRead = inputStream.read(buffer)) != -1) { 
       outputStream.write(buffer, 0, bytesRead); 
      } 

      inputStream.close(); 
      outputStream.close(); 
      JOptionPane.showMessageDialog(null,"file saved to Documents in your C folder."); 
     }}} } 
     catch (Exception e) 
     {JOptionPane.showMessageDialog(null,e);}} 
+2

Verwenden [ 'JTable.getSelectedRows()'] (http://docs.oracle.com/ javase/8/docs/api/javax/swing/JTable.html # getSelectedRows--) anstelle von 'getSelectedRow()' für ein 'int []'. Schleifen Sie das Integer-Array und führen Sie den Code aus, der in der Methode angezeigt wird. Allerdings zwei Anmerkungen: 1) Viel mehr benutzerfreundlich (und robust), um einen 'JFileChooser 'zu öffnen, damit der * Benutzer * ein Verzeichnis zum Herunterladen von Dateien auswählen kann. (Setzen Sie das vor der Schleife.) 2) Stellen Sie sicher, dass das Anzeigen des Optionsfensters außerhalb der Schleife erfolgt und dass es den Benutzer auch über die Anzahl der heruntergeladenen Dateien informiert. –

+0

Veröffentlichen Sie keinen Code in Kommentaren, in denen er unleserlich ist. Bearbeiten Sie die Frage stattdessen mit dem kleinen "Bearbeiten" -Link unter den Tags. Um eine bessere Hilfe zu erhalten, veröffentlichen Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/). –

+0

Das ist kein MCVE, nur nicht kompilierbare Codeschnipsel. Wenn Sie * jemals * dazu kommen sollten, ein MCVE zu veröffentlichen, stellen Sie sicher, dass es eine logische und konsistente Form der Einrückung von Codezeilen und -blöcken verwendet. Die Einrückung soll den Codefluss leichter nachvollziehen lassen! –

Antwort

0

Finaly ich es bekam. Vielen Dank an @Thompson. Ich brauche JTable.getSelectedRows() statt JTable.getSelectedRow(), dann die Schleife das Array wie dargestellt zu verwenden:

 int[] selected_rows= jTable1.getSelectedRows(); 
     Object[] row= new Object[6]; 
     for (int i = 0; i < selected_rows.length; i++){ 
      for (int r = 0; r < row.length; r++){ 
     String tableClick= (jTable1.getModel().getValueAt(selected_rows[i],r).toString());