使用java将图片上传到Mysql数据库

时间:2013-04-29 10:36:37

标签: java mysql spring-jdbc

  Connection cn;
    Statement st;
    PreparedStatement pstmt=null;
    PreparedStatement pst;
    ResultSet rs;
    Object fname, mname, lname, bdate, nation, statusq,InstNo,  photo, combo, place, mimi; 
    int status;



   private void btnNextMouseClicked(java.awt.event.MouseEvent evt) {                                     

        fname=txtFirtsName.getText();
        lname=txtLastName.getText();
        mname=txtMiddleName.getText();
        InstNo=txtInstituteNo.getText();
        place=txtPlacBirth.getText();

        //photo=txtPicturePath.getText();
        status=combostatus.getSelectedIndex();

        Object dave=((JTextField)chooserBirthDate.getDateEditor().getUiComponent()).getText();
        Object isa=combonation.getSelectedItem();

        Object photo=pictureName.getClass();
       // pst.setBytes();
        // bdate=((JTextField)chooserBirthDate.getDateEditor().getUiComponent()).getText();


        if(status==1){
            statusq=("In Active");
    }
        else{
            statusq="Active";}

        try{


       String addrecords="insert into brothers(FirstName, MiddleName, LastName, BirthDate, BirthPlace, Nationality, InstituteNumber, Status, Picture) values('"+
        fname +"', '" +
        mname +"', '" +
        lname +"', '" +
        dave +"', '" +
        place +"', '" +
        isa +"', '" +
        InstNo +"', '" +
        statusq +"', '" +
        photo +"')"; 

        //wrapField();

        st.executeUpdate(addrecords);
        }

我的文件选择器代码并将图片转换为二进制文件:

 private void btnFileChooserActionPerformed(java.awt.event.ActionEvent evt) {                                               
        JFileChooser izoChooser=new JFileChooser();
        izoChooser.showOpenDialog(null);
        File pictureBrother=izoChooser.getSelectedFile();
        pictureName=pictureBrother.getAbsolutePath();
        txtPicturePath.setText(pictureName);

        try {

          File image=new File(pictureName);
          FileInputStream fis=new FileInputStream(image);

          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);
            //e.printStackTrace();
        }

我在代码的底部声明了这些变量:

 private javax.swing.JTextField txtTrial;
    // End of variables declaration                   
String pictureName=null;
int s=0;
byte[] person_image=null; 
}

问题:我的代码没有错误但是数据库没有错误,它仅在图片的BLOB列上注册8B,无论我选择哪个图片都无关紧要。如果直接通过数据库上传数据库中的图片然后再上传,图片就会上传到数据库。什么可能是问题?

我的主要问题是:我GUESS,对象照片= pictureName.getClass();

应该是什么,因为如果我要使用准备好的声明,那么: preparedStatemnt.setBytes(10,person_image);。

但是没有.getBytes();

1 个答案:

答案 0 :(得分:0)

Object photo=pictureName.getClass();

这只会给你pictureName变量的类对象。我怀疑那是你想要的。如果要使用JDBC插入BLOB,则必须处理基础字节流。我建议你仔细阅读:http://docs.oracle.com/javase/tutorial/jdbc/basics/blob.html

哦,请使用PreparedStatement s。