当前位置: 代码迷 >> J2SE >> mySQL无法存储图片解决办法
  详细解决方案

mySQL无法存储图片解决办法

热度:93   发布时间:2016-04-24 01:42:23.0
mySQL无法存储图片
开发一个通讯录,使用mySQL作为数据库,在处理人物头像时,无法把载入图片,mySQL字符集都是utf8,存储类型mediumblob
我试了两种方法,第一种是直接写路径
Java code
                File file=new File("src\\image\\head.png");                  FileInputStream fis=new FileInputStream(file);                  ps.setBinaryStream(10, fis, (int)file.length());

 
第二种方法是使用filechooser选择路径

Java code
           File file = new File(m.getPicturePath());           in = new FileInputStream(file);           ps.setBinaryStream(10, in, (int) file.length());//其中m为另一个类                          //  getPicturePath()方法如下,就是通过文件选择器得到图片的绝对路径                          JFileChooser fileChooser = new JFileChooser(); // 创建文件对话框                            // 创建文件过滤                            FileFilter filter = new FileNameExtensionFilter(                                    "图像文件(*.gif;*.jpg;*.jpeg;*.png)", "gif",                                    "jpg", "jpeg", "png");                            fileChooser.setFileFilter(filter); // 为文件对话框设置文件过滤器                            int returnValue = fileChooser.showOpenDialog(null);// 打开文件选择对话框                            if (returnValue == JFileChooser.APPROVE_OPTION) { // 判断是否选择了文件                               String name=fileChooser.getSelectedFile().getPath();                               ImageIcon icon=new ImageIcon(name);                                                              //等比缩放条件                               int imgWidth=icon.getIconWidth();                               int imgHeight=icon.getIconHeight();                               int conWidth=lbl_picture.getWidth();                               int conHeight=lbl_picture.getHeight();                               int reImgWidth;                               int reImgHeight;                               if(imgWidth/imgHeight>=conWidth/conHeight){                                                                              if(imgWidth>conWidth){                                               reImgWidth=conWidth;                                               reImgHeight=imgHeight*reImgWidth/imgWidth;                                           }else{                                               reImgWidth=imgWidth;                                             reImgHeight=imgHeight;                                           }                                                                }else{                                   if(imgWidth>conWidth){                                    reImgHeight=conHeight;                                    reImgWidth=imgWidth*reImgHeight/imgHeight;                                            }else{                                                      reImgWidth=imgWidth;                                               reImgHeight=imgHeight;                                        }                               }                                File file = fileChooser.getSelectedFile(); // 获得文件对象                                picturePath = file.getAbsolutePath();



运行结果You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"?‘?O?z?xb:???XF??!?^\'_???$è“?é?·
!%?I IkHè·?-???i?·?&é?…mè????????????…' at line 1
确实是乱码,这个乱码看起来应该是路径的,因为我选择不同的图片时,这个乱码的长度不一样

现在很困惑,希望能在这里遇到高手

------解决方案--------------------
将图片保存到数据库,那要用Blob类型才行。
如果是小图片,在使用Blob的时候,可以直接将数据读取到内容。
大型图片,要通过输入输出流才可以(调用正确的重载函数,注意看API注释)
------解决方案--------------------
  相关解决方案