【发布时间】: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 example 或 Short, Self Contained, Correct Example。 -
那不是MCVE,只是无法编译的代码sn-ps。如果您应该曾经发布一个 MCVE,请确保它使用一种合乎逻辑且一致的缩进代码行和块的形式。缩进是为了让代码的流程更容易理解!
-
对不起,我不明白。你有 MCVE 的例子吗?或者你在问什么?
-
"..如果有人有示例代码.." 我确定有人有,但 SO 不是来找它的地方。它不是帮助台。不是代码生成机器。 “..现在构建 MCVE 可能需要一些时间。” 所以开始吧。你所说的似乎你的时间比其他在这里免费提供帮助的人更宝贵。