【问题标题】:Select multiple files shown on JTable and download them from the MySQL database选择 JTable 上显示的多个文件并从 MySQL 数据库下载它们
【发布时间】:2016-11-11 04:02:46
【问题描述】:

我为JButton 编写了代码,用于从MySQL 数据库下载JTable 上表示的选定文件。我希望它下载所有选定的文件。最初我能够一次下载一个文件。现在我已经编辑了代码,它什么也不做,也不返回错误。代码中可能有什么问题。

如何在我的代码中实现这一点?

我的代码:

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

【问题讨论】:

  • 使用JTable.getSelectedRows() 而不是getSelectedRow() 来获得int[]。循环整数数组并执行方法中看到的代码。不过有两个注意事项:1) 更多用户友好(且健壮)弹出JFileChooser 以允许用户 选择一个目录来下载文件。 (把它放在循环之前。) 2)确保选项窗格的显示在循环之外,并且它还通知用户下载的文件数量。
  • 请勿在难以辨认的 cmets 中发布代码。而是使用标签下方的小 edit 链接编辑问题。如需尽快获得更好的帮助,请发帖 minimal reproducible exampleShort, Self Contained, Correct Example
  • 那不是MCVE,只是无法编译的代码sn-ps。如果您应该曾经发布一个 MCVE,请确保它使用一种合乎逻辑且一致的缩进代码行和块的形式。缩进是为了让代码的流程更容易理解!
  • 对不起,我不明白。你有 MCVE 的例子吗?或者你在问什么?
  • "..如果有人有示例代码.." 我确定有人有,但 SO 不是来找它的地方。它不是帮助台。不是代码生成机器。 “..现在构建 MCVE 可能需要一些时间。” 所以开始吧。你所说的似乎你的时间比其他在这里免费提供帮助的人更宝贵。

标签: java mysql swing jtable


【解决方案1】:

我终于明白了。非常感谢@Thompson。我需要使用 JTable.getSelectedRows() 而不是 JTable.getSelectedRow() 然后循环数组,如图所示:

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

【讨论】:

    猜你喜欢
    • 2014-12-22
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多