2017-06-07 1 views
0

Je sais que nous pouvons activer la multi-sélection en utilisant fc.setMultiSelectionEnabled(true). Mais j'ai besoin d'un moyen d'ajouter tous les fichiers sélectionnés dans la base de données.Utilisez JFileChooser pour sélectionner plusieurs fichiers à la fois

J'ai essayé d'utiliser getFilesSelected() mais le problème est que lorsque je tape entrez, seule la première image sélectionnée est ajoutée à la base de données.

C'est ce que je l'ai essayé,

fc.addChoosableFileFilter(new ImageFilter()); 
if (fc.showOpenDialog(btnBrowse) == JFileChooser.APPROVE_OPTION){ 
     textField.setEditable(true); 
     img_name.setEditable(true); 
     textField.setText(fc.getSelectedFile().getAbsolutePath()); 
     img_name.setText(fc.getSelectedFile().getAbsolutePath().substring(fc.getSelectedFile().getAbsolutePath().lastIndexOf("\\")+1)); 
     String ext = fc.getSelectedFile().getAbsolutePath().substring(fc.getSelectedFile().getAbsolutePath().lastIndexOf("\\")+1); 
     file_ext = ext.substring(ext.indexOf('.'),(ext.length())); 



    String query = " insert into load_images(format,image_name,file_loc,photo,date_field) values (?,?,?,?,?)"; 
    preparedStmt = con.prepareStatement(query); 

    preparedStmt.setString (1,file_ext); 
    preparedStmt.setString (2,img_name.getText()); 
    preparedStmt.setString (3, textField.getText()); 

    File f=new File(textField.getText()); 
    int size=(int) f.length(); 
    FileInputStream fis=new FileInputStream(f); 

    preparedStmt.setBinaryStream(4,fis,size); 
    preparedStmt.setTimestamp(5, getCurrentTimeStamp()); 

    preparedStmt.execute(); 
+0

Cela semble avoir beaucoup moins à voir avec balançoire ou 'JFileChooser' que la DB, vous pouvez essayer de le travailler dans une application de ligne de commande. premier! –

+0

Si vous le chargez en plusieurs lignes, [téléchargez toutes les lignes en utilisant des lots] (https://stackoverflow.com/questions/6860691/using-jdbc-preparedstatement-in-a-batch) - Documentation: ['PreparedStatement. addBatch() '] (https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#addBatch()) et [' Statement.executeBatch() '] (https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeBatch()) – MT0

+0

Astuce: Ajouter @ MT0 (ou quiconque, le '@' est important) pour * notifier * la personne d'un nouveau commentaire. –

Répondre

0

Je l'ai travail. J'ai créé une fonction pour insérer chaque image dans la base de données.

Voici le code:

  fc.setSelectedFile(null); 
      fc.setCurrentDirectory(new java.io.File("C:/Users")); 
      fc.setDialogTitle("File Browser"); 
      fc.setAcceptAllFileFilterUsed(false); 
      fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
      fc.resetChoosableFileFilters(); 
      fc.setMultiSelectionEnabled(true); 
      fc.addChoosableFileFilter(new ImageFilter()); 

      if (fc.showOpenDialog(btnBrowse) == JFileChooser.APPROVE_OPTION) 
         { 
          inputFiles = fc.getSelectedFiles(); 

          for (File f: inputFiles) 
          { 
           path = f.getAbsolutePath(); 
           imgName = f.getName(); 
           textField.setEditable(true); 
           img_name.setEditable(true); 
           textField.setText(path); 
           img_name.setText(imgName); 

           file_ext = imgName.substring(imgName.indexOf('.'),(imgName.length())); 

           insert(file_ext,imgName,path); 


          } 
         } 

est ici la fonction,

public void insert(String fileext, String imgNam, String url) 
{ 

    try 
    { 
     Class.forName("oracle.jdbc.OracleDriver").newInstance(); 
     Connection con = DriverManager 
       .getConnection("jdbc:oracle:thin:@10.180.86.139:1521:syndupgdb","fcrhost","FCRHOST"); 
     String query = " insert into load_images(format,image_name,file_loc,photo,date_field) values (?,?,?,?,?)"; 

       preparedStmt = con.prepareStatement(query); 

       preparedStmt.setString (1,fileext); 
       preparedStmt.setString (2,imgNam); 
       preparedStmt.setString (3,url); 


       File fil=new File(url); 
       int size=(int) fil.length(); 
       FileInputStream fis=new FileInputStream(fil); 
       preparedStmt.setBinaryStream(4,fis,size); 

       preparedStmt.setTimestamp(5, getCurrentTimeStamp()); 

      preparedStmt.execute(); 
      con.close(); 


     JOptionPane.showConfirmDialog(null, "Your data Has been Inserted","Result", JOptionPane.DEFAULT_OPTION,JOptionPane.PLAIN_MESSAGE); 

    } 

    catch (Exception e1) 
    { 
     System.out.println("Exception:" + e1); 
    } 

}