砸100分 问个 纳闷的问题
做个相册玩,出现了个问题 ,请看看
我怀疑 问题出在rs.getString("c.name")上!!!,就是有关联的时候出现问题
<table>
<TR>
<%
Statement stmt=null;
ResultSet rs=null;
stmt=conn.createStatement();
String sqlstr="select u.name,c.name ,c.type from userinfo u,photocoll c where c.userid=u.id and u.id=c.userid and u.id= "+id;
rs=stmt.executeQuery(sqlstr);
while(rs.next())
{
//取到做为封面的相片名
/* 第一部分
String fmstr="select name from photoinfo where partenname='"+rs.getString("c.name")+"'";//这里得到的fmstr 放到sqleditor中 可以得到数据,
Statement stmtfm=conn.createStatement();
ResultSet fmrs=stmtfm.executeQuery(fmstr);//问题在这里吗???
String imgname="";
if(fmrs.next())
{
imgname=fmrs.getString("name");
out.print("测试"+fmstr);//根本没有进来
}
*/
/* 测试 第二部分 这里可以得到数据
String tempstr="select name from userinfo";
Statement stmtx=conn.createStatement();
ResultSet rsx=stmtx.executeQuery(tempstr);
String tempname=" ";
if (rsx.next())
{
tempname=rsx.getString("name");
}
*/
%>
<td>
<table>
<tr>
<td>
封面:<img src="upload/<%=tempname%>.jpg" width="120" height="200">
</td>
</tr>
<tr>
<td>
相册名: <%=rs.getString("c.name")%>
</td>
</tr>
<tr>
<td>
类别:<%=rs.getString("c.type")%>
</td>
</tr>
</table>
</td>
<%
}
%>
</tr>
</table>
问题点数:100、回复次数:45Top
1 楼BillyW(阿弥陀佛)回复于 2005-03-29 09:34:26 得分 5
错误提示信息???Top
2 楼zhang21cnboy(事了抚衣去,不留身与名)回复于 2005-03-29 09:39:14 得分 5
嗬嗬,你的判断正确,你的那个sql语句,c.name查询结束后,结果中的字段名肯定不是c.name哦!Top
3 楼mfc2003(抗战二十年(november rain))回复于 2005-03-29 09:44:18 得分 0
TO: BillyW(阿弥陀佛)
没有错误!
就是没有提取到数据
TO:zhang21cnboy(事了抚衣去,不留身与名)
String fmstr="select name from photoinfo where partenname='"+rs.getString("c.name")+"'";//这里得到的fmstr 放到sqleditor中 可以得到数据,
out.print(fmstr);/// 然后在IE里把这个打印出来的语句放到sql查询分析器里执行 是可以得到数据的,所以你说的这种情况根本不存在
Top
4 楼keen1982(keen)回复于 2005-03-29 09:54:22 得分 5
楼主把 String sqlstr="select u.name,c.name ,c.type from userinfo u,photocoll c where c.userid=u.id and u.id=c.userid and u.id= "+id;
改成 String sqlstr="select u.name as uname,c.name as cname ,c.type as ctype from userinfo u,photocoll c where c.userid=u.id and u.id=c.userid and u.id= "+id;
rs.getString的时候你就rs.getString(“cname”); 试试!!
Top
5 楼dophin1003(浮云~~~)回复于 2005-03-29 09:55:19 得分 5
zhang21cnboy说的对,
把rs.getString("c.name")换成rs.getString(2)Top
6 楼mfc2003(抗战二十年(november rain))回复于 2005-03-29 10:03:00 得分 0
我希望你们再看看
问题应该是在while语句内
//取到做为封面的相片名
String xcm=rs.getString("c.name");
String fmstr="select name from photoinfo where partenname='"+xcm+"'";
out.print("测试"+fmstr);//在IE里把这里得到的字符串 放到mysql的sqleditor里去执行是可以 得到数据的!!!
Statement stmtfm=conn.createStatement();
ResultSet fmrs=stmtfm.executeQuery(fmstr);
String imgname="";
if(fmrs.next())
{
imgname=fmrs.getString("name");
}Top
7 楼menghuanlang(梦幻狼)回复于 2005-03-29 10:23:42 得分 5
问题在于rs.getString("c.name")语句!!
c.name 应该对应于这个表的字段名!Top
8 楼menghuanlang(梦幻狼)回复于 2005-03-29 10:25:11 得分 5
问题在于rs.getString("c.name")语句!!
c.name 应该对应于这个表的字段名!
补充:把rs.getString("c.name")中的"c.name"换成表的对应的字段名!
Top
9 楼mfc2003(抗战二十年(november rain))回复于 2005-03-29 10:34:05 得分 0
你们别再说 rs.getString("c.name") 了
我换过来了 还是没有得到数据
<table>
<TR>
<%
Statement stmt=null;
ResultSet rs=null;
stmt=conn.createStatement();
String sqlstr="select u.name uname,c.name cname,c.type ctype from userinfo u,photocoll c where c.userid=u.id and u.id=c.userid and u.id= "+id;
rs=stmt.executeQuery(sqlstr);
while(rs.next())
{
//String countstr="select count(p.id) from photoinfo p,photocoll c where p.partenname=c.name and c.userid="+id+" and p.partenname='"+rs.getString("c.name")+"'";
//String countstr="select count(id) from userinfo";
//Statement stmtcount=conn.createStatement();
//ResultSet rscount=stmtcount.executeQuery(countstr);
//rscount.next();
//int inttotal=rscount.getInt(1);
//out.print("我来看看"+countstr);
//取到做为封面的相片名
String xcm=rs.getString("cname");
String fmstr="select name from photoinfo where partenname='"+xcm+"'";
out.print("测试"+fmstr);
Statement stmtfm=conn2.createStatement();
ResultSet fmrs=stmtfm.executeQuery(fmstr);
String imgname="";
if(fmrs.next())
{
imgname=fmrs.getString("name");
}
fmrs.close();
stmtfm.close();
/* 测试
String tempstr="select name from userinfo";
Statement stmtx=conn.createStatement();
ResultSet rsx=stmtx.executeQuery(tempstr);
String tempname=" ";
if (rsx.next())
{
tempname=rsx.getString("name");
}
*/
%>
<td>
<table>
<tr>
<td>
封面:<img src="upload/<%=imgname%>.jpg" width="120" height="200">
</td>
</tr>
<tr>
<td>
相册名: <%=rs.getString("cname")%>
</td>
</tr>
<tr>
<td>
类别:<%=rs.getString("ctype")%>
</td>
</tr>
<tr>
<td>
相片总数<%--=inttotal--%>
</td>
</tr>
</table>
</td>
<%
}
%>
</tr>
</table>Top
10 楼dophin1003(浮云~~~)回复于 2005-03-29 11:00:14 得分 5
如果不是那里的错,就找不到错误了。
你的第一部分和第二部分是一样的,为什么第二部分不出错?Top
11 楼xitianjile(空想社會主義)回复于 2005-03-29 11:26:17 得分 5
难道不会用异常来找错误吗?
猜测是不好的。。Top
12 楼mhlovers800827()回复于 2005-03-29 13:32:36 得分 5
upTop
13 楼dophin1003(浮云~~~)回复于 2005-03-29 13:47:58 得分 0
lz说了没有异常,只是提不到数据而已。Top
14 楼su27007(人外有人,天外有天)回复于 2005-03-29 13:56:51 得分 20
/* 测试
String tempstr="select name from userinfo";
Statement stmtx=conn.createStatement();
ResultSet rsx=stmtx.executeQuery(tempstr);
String tempname=" ";
if (rsx.next())
{
tempname=rsx.getString("name");
}
*/
你的第二部分为什么不用"select * from photoinfo"进行测试?Top
15 楼wafer_w(流浪的风)回复于 2005-03-29 14:38:15 得分 1
别人叫你把sql语句改为c.name as cname你都没试,怎么知道不行Top
16 楼mfc2003(抗战二十年(november rain))回复于 2005-03-29 16:05:19 得分 0
TO:su27007(人外有人,天外有天)
第二部分 用"select * from photoinfo" 可以得到数据
可为什么 加了where 语句 就不行了??
xcm 变量 是得到了数据的!!
String xcm=rs.getString("cname");
// String fmstr="select name from photoinfo"; //这里可以得到数据
String fmstr="select name from photoinfo where partenname='"+xcm+"'";
out.print("测试"+fmstr);//这里打印出来语句 放到sqleditor里执行 可以得到数据
Statement stmtfm=conn2.createStatement();
ResultSet fmrs=stmtfm.executeQuery(fmstr);
String imgname="";
if(fmrs.next())
{
imgname=fmrs.getString("name");
}
fmrs.close();
stmtfm.close();Top
17 楼daimojingdeyu(戴墨镜的鱼)回复于 2005-03-29 16:15:45 得分 1
同意rnfc2003的意见,数据库连接没有关闭的缘故Top
18 楼nickyliuk(茶壶里煮饺子)回复于 2005-03-29 16:16:40 得分 1
把你的 fmrs.close();
stmtfm.close();
放到最后再关。
Top
19 楼mfc2003(抗战二十年(november rain))回复于 2005-03-29 16:23:08 得分 0
原来问题在这里:
String fmstr="select name from photoinfo where partenname='"+xcm.trim()+"'";
out.print("测试"+fmstr);
Statement stmtfm=conn2.createStatement();
ResultSet fmrs=null;
fmrs=stmtfm.executeQuery(fmstr);
String imgname="";
fmrs.next();
//imgname=(String)fmrs.getString("name");//问题出现在这里
imgname="050211";
fmrs.close();
stmtfm.close();
如果不注释掉,我注释的那一句 就会出现如下错误:
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Before start of result set
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.coll_jsp._jspService(coll_jsp.java:284)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.sql.SQLException: Before start of result set
org.gjt.mm.mysql.ResultSet.checkRowPos(ResultSet.java:1336)
org.gjt.mm.mysql.ResultSet.getString(ResultSet.java:220)
org.gjt.mm.mysql.ResultSet.getString(ResultSet.java:889)
org.apache.jsp.coll_jsp._jspService(coll_jsp.java:218)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.
--------------------------------------------------------------------------------
Apache Tomcat/5.0.28
Top
20 楼wtiancai(博学,审问,慎思,明辨,笃行.)回复于 2005-03-29 16:29:46 得分 20
是空值报错吧Top
21 楼su27007(人外有人,天外有天)回复于 2005-03-29 17:00:06 得分 0
你把
if(fmrs.next())
{
imgname=fmrs.getString("name");
}
中的if换成while试试看!Top
22 楼su27007(人外有人,天外有天)回复于 2005-03-29 17:08:12 得分 5
对了,你先判断一下fmrs.next()这个方法执行的结果是什么?
如果是false,那么执行fmrs.getString("name")这个方法,肯定是不对的!Top
23 楼mfc2003(抗战二十年(november rain))回复于 2005-03-29 17:10:48 得分 0
问题找到了 原来是编码的问题
蒙了2天 我火了
String fmstr="select name from photoinfo where partenname='kz'";
如果 把partenname='kz' 条件换成中文 就得不到数据
但我从数据库里可以取出中文, 为什么在条件语句里不支持中文??
这个怎么解决啊???Top
24 楼su27007(人外有人,天外有天)回复于 2005-03-29 17:15:44 得分 0
你把那个条件转码看看!
String类里面有个方法,
String sqlparameter = new String(partname.getBytes("iso-8859-1"), "big5");
Top
25 楼su27007(人外有人,天外有天)回复于 2005-03-29 17:17:02 得分 0
数据库的查询条件最好不要用中文,很麻烦的!Top
26 楼mfc2003(抗战二十年(november rain))回复于 2005-03-29 17:24:24 得分 0
TO: su27007(人外有人,天外有天) (
这个方法无效!
另外: 我在mysql里建库的时候 定义的编码是 gb2312Top
27 楼liliescn(谁人打的太极拳?)回复于 2005-03-29 17:32:09 得分 0
关注中。。。Top
28 楼java_ak47(精通EJB)回复于 2005-03-29 17:35:30 得分 0
支持Top
29 楼su27007(人外有人,天外有天)回复于 2005-03-29 17:40:22 得分 0
忘记跟你说了,
String sqlparameter = new String(partname.getBytes("iso-8859-1"), "big5");
这个里面的big5是繁体的字符集,简体的话就用GB2312!
那个ISO-8859-1也可能要换。Top
30 楼mfc2003(抗战二十年(november rain))回复于 2005-03-29 17:48:35 得分 0
to: su27007(人外有人,天外有天) (
这个我当然知道
仍然无效:Top
31 楼ziteng1(籽疼)回复于 2005-03-29 17:51:36 得分 5
既然是编码问题就把sql转码试试
用
String sqlparameter = new String(partname.getBytes("iso-8859-1"), "gb2312");
或反过来试试
String sqlparameter = new String(partname.getBytes("gb2312"), "iso-8859-1");Top
32 楼ziteng1(籽疼)回复于 2005-03-29 17:58:27 得分 1
突然想起来,你的库是中文的
不行的话
试试
String sqlparameter = new String(partname.getBytes("gb2312"), "UTF8");Top
33 楼su27007(人外有人,天外有天)回复于 2005-03-29 18:26:38 得分 0
写了个测试程序,验证了在应用程序里面,是不用转码的。
Top
34 楼xoanon(玮)回复于 2005-03-29 18:40:28 得分 0
行了没!~~Top
35 楼lovexin(魔泪之剑)回复于 2005-03-29 18:56:00 得分 0
结交天下,程序员朋友.
QQ: java.web.nt (4181313) 本群只加高手.且有开发经验者. 新手请不要加.
java.web.nt/2 (7346044) 新手乐员.同样也是高手多多.
本人QQ:87622201
加入的朋友.请写下验证Top
36 楼su27007(人外有人,天外有天)回复于 2005-03-30 09:04:19 得分 0
paras = new String(paras.getBytes("ISO-8859-1"), "big5");
sqlRst=sqlStmt.executeQuery("select * from employee_tb where emp_name='"+paras+"'");
在繁体操作系统下测试通过,页面要有
<%@page contentType="text/html;charset=big5"%>
paras为繁体中文的参数
Top
37 楼angelsmode()回复于 2005-03-30 09:41:37 得分 1
个人建议,尽量避免rs循环中再出现另一个rs,即使他们名字不一样,即使他们也不是同一个连接。Top
38 楼menghuanlang(梦幻狼)回复于 2005-03-30 09:50:34 得分 0
UP一下Top
39 楼jianghuxing(回头看看原来我一无所有)回复于 2005-03-30 09:56:08 得分 0
<table>
<TR>
<%
Statement stmt=null;
ResultSet rs=null;
stmt=conn.createStatement();
String sqlstr="select u.name,c.name as cname,c.type from userinfo u,photocoll c where c.userid=u.id and u.id=c.userid and u.id= "+id;
rs=stmt.executeQuery(sqlstr);
while(rs.next())
{
//取到做为封面的相片名
/* 第一部分
String fmstr="select name from photoinfo where partenname='"+rs.getString("c.name")+"'";//这里得到的fmstr 放到sqleditor中 可以得到数据,
Statement stmtfm=conn.createStatement();
ResultSet fmrs=stmtfm.executeQuery(fmstr);//问题在这里吗???
String imgname="";
if(fmrs.next())
{
imgname=fmrs.getString("name");
out.print("测试"+fmstr);//根本没有进来
}
*/
/* 测试 第二部分 这里可以得到数据
String tempstr="select name from userinfo";
Statement stmtx=conn.createStatement();
ResultSet rsx=stmtx.executeQuery(tempstr);
String tempname=" ";
if (rsx.next())
{
tempname=rsx.getString("name");
}
*/
%>
<td>
<table>
<tr>
<td>
封面:<img src="upload/<%=tempname%>.jpg" width="120" height="200">
</td>
</tr>
<tr>
<td>
相册名: <%=rs.getString("cname ")%>
</td>
</tr>
<tr>
<td>
类别:<%=rs.getString("c.type")%>
</td>
</tr>
</table>
</td>
<%
}
%>
</tr>
</table>
修改:
String sqlstr="select u.name,c.name as cname,c.type from userinfo u,photocoll c where c.userid=u.id and u.id=c.userid and u.id= "+id;
修改2:
<td>
相册名: <%=rs.getString("cname ")%>
</td>
Top
40 楼wulangzhe(舞狼者)回复于 2005-03-30 11:01:14 得分 0
源码再哪里呀 看不到呀
Top
41 楼nbamjzhldm()回复于 2005-03-30 13:07:20 得分 0
upTop
42 楼xiaojun110(海盗船长)回复于 2005-03-30 20:26:15 得分 0
顶芽Top
43 楼sunboyyq(yyq)回复于 2005-03-30 22:05:44 得分 0
好热闹,希望你早点解决Top
44 楼gaochao79(www.informe.cn)回复于 2005-03-30 23:09:55 得分 0
兄弟name是关键字吧?Top
45 楼gaochao79(www.informe.cn)回复于 2005-03-30 23:10:40 得分 0
[c].[name] 试试Top




