我想显示sqlserver中的图片!

fat_rat_1980 2003-08-26 12:56:16
据说可以用存储图片地址和图片本身到数据的两种方式,由于我是新手,所以暂选第一种。
〈%
.....
String mapname;
mapname=new String(request.getParameter("name").getBytes("ISO-8859-1"));
sql="select * from testmap2 where name='"+mapname+"'";
rs=stmt.executeQuery(sql);
out.println("<table border=1 width='100%'>");
while (rs.next())
{
String address=rs.getString("address");
String name=rs.getString("name");
out.println("<tr><td>"+address+"</td><td>"+name+"</td><tr>"
);
}
%>
<img src="<%=address%>" >
报错在<img src="<%=address%>" >句,address存储的是地址,我用了绝对路径c:\jakarta-tomcat-4.1.24\webapps\examples\map2\12.jpg和相对路径/map2/12.jpg两种方式都不成功,不知道为何。
报错为:Since fork is true, ignoring compiler setting.
[javac] Compiling 1 source file
[javac] Since fork is true, ignoring compiler setting.
[javac] C:\jakarta-tomcat-4.1.24\work\Standalone\localhost\examples\db\query2_jsp.java:86: cannot resolve symbol
[javac] symbol : variable address
[javac] location: class org.apache.jsp.query2_jsp
[javac] out.print(address);
[javac] ^
[javac] 1 error
请高人指教,同时告诉我如何存储地址到数据库中去。
由于我是新人,其实我很想选择第二种方式,但不知道难度多大,请高人明示,我怕看不懂代码,最好请附加详细说明。
...全文
48 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
fat_rat_1980 2003-08-27
  • 打赏
  • 举报
回复
liad:
看了哪文章,有些不懂。
insert into PICS(PICID,IMAGE) values (?,?)"; 中怎么是用“?”,不懂!
ps.setInt(1,picid); 这怎么两个参数?
ps.setBinaryStream(2,fis,l2); 这怎么三个参数,表示什么含义?
fat_rat_1980 2003-08-27
  • 打赏
  • 举报
回复
liad:
response.setContentType("image/jpeg");设置图片类型能不能设置为corldraw制作的图片类型。
还有len = in.read(buf, 0, 1024)) 中的1024是否设置的是图片的大小,
如果我的图片很大的话,应该设置大点的buf吧,也就是该成比1024大的值?
输出图片的显示尺寸可以在代码中设置么,因为我觉得9001的图片太小,想把他显示时设大点!谢谢!
liad 2003-08-27
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2125/2125017.xml?temp=.7946894
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=89404
参考一下吧
fat_rat_1980 2003-08-26
  • 打赏
  • 举报
回复
对了,图片12.jpg所在目录map2与该段代码的上层目录是同层。
fat_rat_1980 2003-08-26
  • 打赏
  • 举报
回复
毕竟第一种方式存储的是路径,如果图片换地方了而路径又没有及时更新,可能就会出大问题了,所以我很希望选择第二种方式,但能力有限。请高人解惑!
fat_rat_1980 2003-08-26
  • 打赏
  • 举报
回复
还有我想问下,以<img src="<%=address%>" >这种方式连接的图片,
除了jpg可以外,对coredraw矢量图能不能显示出来。
如果要显示coredraw图又该如何做?
请指教!
junnef 2003-08-26
  • 打赏
  • 举报
回复
第三个是的到ServletOutputStream对象,然后打印到页面显示;第四个是返回-1则表示数据读去完毕。
junnef 2003-08-26
  • 打赏
  • 举报
回复
in = rs.getBinaryStream("logo");logo是所在的列名。
zhaoxichao 2003-08-26
  • 打赏
  • 举报
回复
显示X表示查询语句没有得到结果
把sql打印出来,测试一下
junnef 2003-08-26
  • 打赏
  • 举报
回复
pub_info,”9901“, 是什么东西?它那个试查询条件,用来却清查询唯一的一张图片的。
fat_rat_1980 2003-08-26
  • 打赏
  • 举报
回复
vibra,我用绝对路径设置address值成功了,可是为何相对路径不能成功。
相对路径设置如题!
fat_rat_1980 2003-08-26
  • 打赏
  • 举报
回复
还有vibra:
我按你说的定义String address=""在while循环外面,可是图片显示的是一个X(只有一个框,没有图片显示)
如果把同样定义在while循环外面,但是String address;(没有设置”“)
报错:
variable address might not have been initialized
[javac] out.print(address);

怎样才能成功呀?
fat_rat_1980 2003-08-26
  • 打赏
  • 举报
回复
太感谢各位对我的热心帮助,
我大概明白了怎么会事,
可是我现在数据库中一张图片都没有,
那想用liad的方法显示图片都没有办法,
不知道对sql server数据库如何把图片存进去,好让我测试下这个代码的可行性!
小弟先谢过了!
fat_rat_1980 2003-08-26
  • 打赏
  • 举报
回复
liad:
你的代码
String sql = "select * from pub_info where pub_id = '9901'";
ResultSet rs = stmt.executeQuery(sql);
if (rs.next())
{
in = rs.getBinaryStream("logo");
response.setContentType("image/jpeg");
sop = response.getOutputStream();
int len;
byte[] buf = new byte[1024];
while ((len = in.read(buf, 0, 1024)) != -1)
{
sop.write(buf, 0, len);
}
}


pub_info,”9901“, 是什么东西?
in = rs.getBinaryStream("logo");是不是读入字符流,那么logo是什么意思?
sop = response.getOutputStream();是不是读出字符流?
((len = in.read(buf, 0, 1024)) != -1)表示什么?
抱歉我水平很差,能不能帮我说明下。
fat_rat_1980 2003-08-26
  • 打赏
  • 举报
回复
请高人传业授道解惑
liad 2003-08-26
  • 打赏
  • 举报
回复
<%-- showlogo.jsp --%>
<%@ page language="java" import="java.sql.*,java.util.*,java.io.*" %>
<%

String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
String user = "sa";
String password = "password";

InputStream in = null;
ServletOutputStream sop = null;
try
{
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
String sql = "select * from pub_info where pub_id = '9901'";
ResultSet rs = stmt.executeQuery(sql);
if (rs.next())
{
in = rs.getBinaryStream("logo");
response.setContentType("image/jpeg");
sop = response.getOutputStream();
int len;
byte[] buf = new byte[1024];
while ((len = in.read(buf, 0, 1024)) != -1)
{
sop.write(buf, 0, len);
}
}
sop.close();
in.close();
rs.close();
stmt.close();
conn.close();
}
catch (Exception exc)
{
out.println("An error occurs : " + exc);
}
%>
zhaoxichao 2003-08-26
  • 打赏
  • 举报
回复
同意楼上
你的String address放在while里面申明,是作为一个局部变量,范围是while内,在外面得到address肯定是报错
vibra 2003-08-26
  • 打赏
  • 举报
回复
我觉得你应该把String address=""; 放在while(rs.next()){...}的前面,然后再
while(rs.next()){address=rs.getString("address");...}

我以前也经常碰到这个问题。
你敢扫一扫吗 2003-08-26
  • 打赏
  • 举报
回复
数据库用clob对象来存储图片,然后在把图片转换成二进制字节流的形式就可以访问了吗
fat_rat_1980 2003-08-26
  • 打赏
  • 举报
回复
楼上的,能不能说明白些。
加载更多回复(2)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧