提问者:小点点

需要在同一列一次上传多张图片


所以如上所述,我需要上传更多的一个图像到我的数据库,我使用Jfilechooser来选择我的文件,我的代码一次只适用于一个图像,我有一个blob列来保存我的图像

我的sql查询的代码

try {

        PreparedStatement pst =null;
        ResultSet rst=(ResultSet) pst;

        Connection con=(Connection)    DriverManager.getConnection("jdbc:mysql://localhost/iqari", "root","");
        String sql="UPDATE first SET test = ? WHERE   id  = ?";
        pst=(PreparedStatement) con.prepareStatement(sql);
           int row = masterTable.getSelectedRow();

        Object d =   masterTable.getValueAt(row, 0);
        pst.setBytes(1,person_image);
        pst.setObject(2,d);
        pst.execute();
        JOptionPane.showMessageDialog(mainPanel, "done");
    } catch (Exception e) {


        System.out.println(e.getMessage());
    }

附加我的图像的代码EDITED

    JFileChooser chooser =new JFileChooser();
    chooser.setMultiSelectionEnabled(true);
    chooser.showOpenDialog(null);

    File[] files = chooser.getSelectedFiles();

    for (File f : files) {
   filename = f.getAbsolutePath();
   try
   {
    File image2 = new File(filename);
    FileInputStream fis = new FileInputStream(image2);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buf = new byte[1024];

    for(int readNum; (readNum = fis.read(buf)) != -1;){
       bos.write(buf, 0, readNum);
     }

     person_image = bos.toByteArray();
    }
     catch (Exception e) {
    JOptionPane.showMessageDialog(null, e);
     }
  }

任何帮助都可以是有用的家伙。


共1个答案

匿名用户

使用. getSelectedFiles()时出现错误的原因是它返回的是对象数组,而不是单数对象。尝试这样的东西;

更新了代码,我无法测试这个…

File[] files = chooser.getSelectedFiles();

// instantiates an array of byte arrays of size files.length
byte[][] images = new byte[files.length][];
int numberOfImages = 0;
for (File f : files) {
    filename = f.getAbsolutePath();
    try 
    {
        File image2 = new File(filename);
        FileInputStream fis = new FileInputStream(image2);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];

        for(int readNum; (readNum = fis.read(buf)) != -1;){
           bos.write(buf, 0, readNum);
        }

        person_image = bos.toByteArray();

        // adds the byte array to your array & increases the numberOfImages
        images[numberOfImages++] = person_image;
    } 
    catch (Exception e) {
        JOptionPane.showMessageDialog(null, e);
    }
}

在您原来的SQL代码中更改此部分;

pst = (PreparedStatement) con.prepareStatement(sql);
int row = masterTable.getSelectedRow();

Object d = masterTable.getValueAt(row, 0);
pst.setBytes(1,person_image);
pst.setObject(2,d);
pst.execute();

对这个;

for(byte[] imageAsByteArray : images) {
    pst = (PreparedStatement) con.prepareStatement(sql);

    int row = masterTable.getSelectedRow();
    Object d = masterTable.getValueAt(row, 0);

    pst.setBytes(1, imageAsByteArray);
    pst.setObject(2, d);
    pst.execute();
}