怎样用SQL往表中插入本地磁盘的图片数据,并且用jsp获得图片数据并显示在页面上呢,谢谢!!

解决方案 »

  1.   

    用sql Server的话 最好不要把图片存储进入数据库 
    你可以把你的图片放到项目中 数据库中存储图片的路径
    然后读出来 显示就行了
      

  2.   

    sql中图片的数据类型为:image类型;
    通过流的形式读取和存入参考例子:
    /**
      * 保存图像文件到数据库指定的位置
      * @param sqlstr 指定位置的sql语句
      * @param file 指定图像文件
      * @return 保存成功返回true,否则返回false
      */
     public boolean storeImage(String sqlstr, File file)
     {
      try{
       //打开文件
       FileInputStream fin= new FileInputStream(file);
       //建一个缓冲保存数据
       ByteBuffer nbf = ByteBuffer.allocate((int)file.length());
       byte[] array = new byte[1024];
       int offset = 0, length=0;
       //读存数据
       while ((length=fin.read(array)) >0)
       {
         //nbf.put(array, offset, length);
         if (length != 1024)
        nbf.put(array, 0, length);
         else
        nbf.put(array);
         offset += length;
       }
       //关闭文件
       fin.close();
       //新建一个数组保存要写的内容
       byte[] content = nbf.array();
       //保存数据
       return setImage(sqlstr, content);
      }
      catch(FileNotFoundException e)
      {
       e.printStackTrace();
      }
      catch(IOException e)
      {
       e.printStackTrace();
      }
      //如果发生文件读写错误都会返回false
      return false; 
     }
     
     /**
      * 保存字节数组到数据库指定位置
      * @param sqlstr 描述位置的sql语句
      * @param in  要保存的字节数组
      * @return 返回是否成功保存
      */
     private boolean setImage(String sqlstr, byte[] in)
     {
      boolean flag = false;
      if (sqlstr == null)
       sqlstr = "Select img from image_table";
      try{
       Statement stmt = conn.createStatement(
       ResultSet.TYPE_SCROLL_INSENSITIVE,
       ResultSet.CONCUR_UPDATABLE);
       ResultSet rs = stmt.executeQuery(sqlstr);
       if (rs.next())
       {
        rs.updateBytes(1, in);
        rs.updateRow();
       }
       rs.close();
       flag = true;
      }
      catch(Exception e)
      {
       e.printStackTrace();
      }
      return flag;
     }
     
     /**
      * 从数据库指定位置获取图像文件
      * @param sqlstr 描述数据库位置的sql语句
      * @param file  图像文件保存路径
      * @return 是否正确返回文件
      */
     public boolean retrieveImage(String sqlstr, File file)
     {
      boolean flag = false;
      if (sqlstr == null)
       sqlstr = "select img from image_table";
      try {
        Statement stat = conn.createStatement();
        ResultSet rs=stat.executeQuery(sqlstr);
        while (rs.next())
        {
       byte[] content = rs.getBytes(1);
       if (!rs.wasNull())//找到数据
       {
         flag = true;
         //保存到指定文件
         FileOutputStream fout= new FileOutputStream(file);
         fout.write(content);;
         fout.flush();
         fout.close();
       }
      //保存第一条纪录,跳出
       break;
        }
        //关闭连接
        rs.close();
        stat.close();
      }
      catch (SQLException sqle) {
        sqle.printStackTrace() ;
      }
      catch(Exception e)
      {
       e.printStackTrace();
       flag = false;//如果有io错误则不成功
      }
      return flag;
     }