2017-06-07 9 views
0

fc.setMultiSelectionEnabled(true)を使用して複数選択を有効にすることができます。しかし、選択したすべてのファイル( )をデータベースに追加する方法が必要です。JFileChooserを使用して複数のファイルを一度に選択

私はgetFilesSelected()を使用して試してみたが、問題は、私が打ったときのみ最初に選択した画像がデータベースに追加され、を入力することです。

これは私が試したものです、

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

は、これはDBよりもスイングや 'JFileChooser'で行うことがはるかに少ないを持っていると思われるので、あなたはそれを働いてみてくださいコマンドラインアプリで最初! –

+0

mulripleの行にロードする場合は、[バッチを使用してすべての行をアップロードする](https://stackoverflow.com/questions/6860691/using-jdbc-preparedstatement-in-a-batch) - ドキュメント:['PreparedStatement。 addBatch() '](https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#addBatch())および[' Statement.executeBatch() '](https: /docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeBatch()) – MT0

+0

ヒント:@ MT0(または誰でも '@ 'が重要です)を追加して*人に通知する*新しいコメントの –

答えて

0

私が働いてそれを得ました。すべての単一のイメージをデータベースに挿入する関数を作成しました。ここで

は、コードは次のとおりです。

  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); 


          } 
         } 

ここで機能だ、

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); 
    } 

} 
関連する問題