oracle中存取大字段问题:long raw字段存储文件 我使用jspsmartupload文件上传组件上传文件,文件上传保存到oracle数据库的long raw字段,然后在网页上下载此文件,结果下载下来的文件打开后出现的是乱码。如果上传的是图片文件,则图片不能显示。请帮忙!急。若有代码,请发个给我,谢谢!my Email: [email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这是个正常显示的代码create table imgfile(name varchar2(50),afile long raw,type varchar2(50)); import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;import java.sql.*;public class ImageServlet extends HttpServlet { //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {if((request.getParameter("name")==null)||(request.getParameter("name").equals(""))){PrintWriter out = response.getWriter(); response.setContentType("text/plain"); out.println("No image found"); return;}ResultSet result=null;byte [] bytes;String type;try { Class.forName("oracle.jdbc.driver.OracleDriver"); }catch(ClassNotFoundException e) {}try { Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.13:1521:orcl", "scott", "tiger"); PreparedStatement stmnt = con.prepareStatement("select afile,type from imgfile where name = ? "); stmnt.setString(1,new String(request.getParameter("name").getBytes("ISO8859_1")));System.out.println(new String(request.getParameter("name").getBytes("ISO8859_1"))); result=stmnt.executeQuery(); if(result.next()) { bytes = result.getBytes (1);//The sequence is very important here!!!!!! type=result.getString(2); } else { PrintWriter out = response.getWriter(); response.setContentType("text/plain"); out.println("No image found"); return; } response.setContentType(type); ServletOutputStream out = response.getOutputStream(); out.write(bytes); out.close(); stmnt.close(); con.close(); }catch(SQLException e) { System.out.println(e.getMessage()); } }} 我的处理方式: 1、使用jspsmartupload组件得到上传文件的文件内容; 2、将文件内容存入到数据库; 3、下载文件时,从数据库long raw字段取出文件内容,结果下载下来的文本文件出现乱码,图片文件则不能显示。楼上的你说的只是取数据而已呢。 看来你已经存入了数据库,取出来图片不能显示先看看 bytes = result.getBytes (1)后bytes.length(就是取出来没有),再看setContentType对不对,应该是"image/jpeg","image/png"等等.都用println打出来看看.错误无非就是没取到字节流或者图象编码没对. 有搞过pro c的没?问个问题。 登陆golden32 如何查看已经执行完成的SQL的执行时间和等待时间? oracle崩溃了,没有备份,有办法恢复吗? PL/SQL查询的问题 如何在oragle11g下用代码动态的添加list-range分区 oracle的函数,存储过程等怎么调试? 我是新来的,希望大家原谅我提个很菜的问题 ORACLE 问题求助(在线等待) 如何查看oracle11g在何时进行了表空间扩展 ORA-01401: 插入的值对于列过大 请问如何复制一个表
create table imgfile(name varchar2(50),afile long raw,type varchar2(50
)); import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;public class ImageServlet extends HttpServlet {
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
if((request.getParameter("name")==null)||(request.getParameter("name")
.equals("")))
{
PrintWriter out = response.getWriter();
response.setContentType("text/plain");
out.println("No image found");
return;}
ResultSet result=null;
byte [] bytes;
String type;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver"); }catch(ClassNotFoundException e) {}
try
{
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.
1.13:1521:orcl",
"scott", "tiger"); PreparedStatement stmnt = con.prepareStatement("select afile,type from
imgfile where name = ? "); stmnt.setString(1,new String(request.getParameter("name").getBytes("IS
O8859_1")));
System.out.println(new String(request.getParameter("name").getBytes("I
SO8859_1")));
result=stmnt.executeQuery();
if(result.next())
{
bytes = result.getBytes (1);//The sequence is very important he
re!!!!!!
type=result.getString(2);
}
else
{
PrintWriter out = response.getWriter();
response.setContentType("text/plain");
out.println("No image found");
return;
}
response.setContentType(type);
ServletOutputStream out = response.getOutputStream();
out.write(bytes);
out.close();
stmnt.close(); con.close(); }catch(SQLException e)
{
System.out.println(e.getMessage());
} }}
1、使用jspsmartupload组件得到上传文件的文件内容;
2、将文件内容存入到数据库;
3、下载文件时,从数据库long raw字段取出文件内容,结果下载下来的文本文件出现乱码,图片文件则不能显示。楼上的你说的只是取数据而已呢。