InitialContext ic = new InitialContext(); 
             DataSource ds = (DataSource)ic.lookup("jdbc/user1DS"); 
             Connection conn = ds.getConnection(); 
              String sql="insert into product (p_name,p_id,p_image,p_describe)"+"values(?,?,?,?)";
              FileInputStream fs=new FileInputStream(request.getParameter("p_image"));
              ByteArrayOutputStream bos = new ByteArrayOutputStream();
              byte byteBuffer[]=new byte[1024];
              int byteCounter;
              while((byteCounter=fs.read(byteBuffer))!=-1){
               bos.write(byteBuffer,0,byteCounter);
               }
               byteBuffer=bos.toByteArray();
             PreparedStatement pst1 = conn.prepareStatement(sql);
                 pst1.setString(1, request.getParameter("p_name"));
                 pst1.setString(2, request.getParameter("p_id"));
                 pst1.setBytes(3,byteBuffer);
                 pst1.setString(4, request.getParameter("p_describe"));
                 boolean flag=pst1.execute();
                 if(flag==true)
                 System.out.println("上传成功");
                 else
                     System.out.println("上传失败");
我想用servlet和oracle来实现把商品的信息存入数据库,但是图片不能存入,望大侠们帮一下忙哈,p_name,p_id,p_image,p_describe这个是数据库字段,还有我设置p_image的类型为blob

解决方案 »

  1.   

    但是图片不能存入可以把图片的URL存在数据库里,然后取的时候取URL,图片存储在硬盘上
      

  2.   

    图片可以用流的形式存在blob字段里。
      

  3.   

    请看这里,是你想要的
    http://hi.baidu.com/%C2%ED%D3%C0/blog/item/5a00b218cb0ef60535fa412f.html
      

  4.   

    在oracle数据库中创一个字段,字段类型设为Blob,java.sql.Blob有相关的对应的类可以使用,
    使用Hibernate做持久化Img img = new Img();
    img.setPic( Hibernate.createBlob(new FileInputStream("c:\\pic.jpg")) );
    session.save( img );Hibernate.createBlob()方法会返回一个Blob类型的对象----------还是建议 jdbc方式存储图片
    http://topic.csdn.net/t/20021225/09/1297093.html
      

  5.   

    JDBC 操作 Oracle 的Blob需要3个步骤,具体的请参考这个 http://www.java2000.net/viewthread.jsp?tid=3164核心有
    1 启动事务
    2 insert EMPTY_BLOB 初始化BLOB字段数据
    3 select for update 更新
      

  6.   


                            PreparedStatement ps = null;
                            Statement sm = con.createStatement();
    ps = con.prepareStatement("create table mkblob(id number(6) primary key,blobdata Blob)");
    ps.executeUpdate();
    ps = con.prepareStatement("insert into mkblob values(?,empty_blob())");
    ps.setInt(1, 100001);
    ps.executeUpdate(); // 读回来再把文件写进去
    ps = con.prepareStatement("select blobdata from mkblob where id=100001 for update");
    rs = ps.executeQuery();
    if (rs.next())
    blob = rs.getBlob(1);
    File files = new File("workEnglish.exe");
    FileInputStream fis = new FileInputStream(files);
    // 取得输入文件的大小
    System.out.println("file size=" + fis.available() / 1024 + "kb");
    // 从第一个位置开始写入对象
    OutputStream os = blob.setBinaryStream(0);
    byte[] data = new byte[(int) fis.available()];
    fis.read(data);
    os.write(data);
    fis.close();
    os.close();