注册 登录
编程论坛 J2EE论坛

关于struts查询问题 有代码

lewis0323 发布于 2006-11-21 14:53, 2060 次点击

请大家帮我看看 我这个查询哪里不对 我对数据结构也不是很清楚 数据上出错了 运行时显示“将截断字符串或二进制数据”java.lang.ClassCastException

首先我在一个页面中提交了查询表单
<html:form action="/registredeemAction.do">
<center>
<table border="0">
<tr>
<td>请输入需补办暂住证人身份证号:</td>
<td><html:text property="idcard" /></td>
</tr>

<tr>
<td colspan="2" align="center"><html:submit value="查询"/><html:reset value="重添"></html:reset></td>
</tr>


</table>
</center>
</html:form>

然后在action

try{
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from T_A01 where idcard = "+"'"+idcard+"'";
rs=stmt.executeQuery(sql);
if(rs.next())
{
redeemDatabase.addElement(rs.getString("idcard"));
redeemDatabase.addElement(rs.getString("name"));
redeemDatabase.addElement(rs.getString("sex"));
redeemDatabase.addElement(rs.getString("folk"));
redeemDatabase.addElement(rs.getString("birthyear"));
redeemDatabase.addElement(rs.getString("birthmonth"));
redeemDatabase.addElement(rs.getString("birthday"));
redeemDatabase.addElement(rs.getString("marriage"));
redeemDatabase.addElement(rs.getString("occupation"));
redeemDatabase.addElement(rs.getString("relativephone"));
redeemDatabase.addElement(rs.getString("privence"));
redeemDatabase.addElement(rs.getString("resume"));
ok=true;
return(mapping.findForward("successredeem"));
}

(估计就是这里错了)

显示用自定义标签

try
{


Vector redeemVector=(Vector)session.getAttribute("redeemDatabase");

out.println("<table border=\"2\" cellspacing=\"0\" cellpadding=\"0\">");
out.println("<tr>");
out.println("<th BGCOLOR=\"#00FF00\"><b>身份证</b></th>");
out.println("<th BGCOLOR=\"#00FF00\"><b>姓名<b></th>");
out.println("<th BGCOLOR=\"#00FF00\"><b>性别</b></th>");
out.println("<th BGCOLOR=\"#00FF00\"><b>民族</b></th>");
out.println("<th BGCOLOR=\"#00FF00\"><b>出生日期</b></th>");
out.println("<th BGCOLOR=\"#00FF00\"><b>婚姻状况</b></th>");
out.println("<th BGCOLOR=\"#00FF00\"><b>职业</b></th>");
out.println("<th BGCOLOR=\"#00FF00\"><b>亲属联系方式</b></th>");
out.println("<th BGCOLOR=\"#00FF00\"><b>来自省份</b></th>");
out.println("<th BGCOLOR=\"#00FF00\"><b>简历</b></th>");
out.println("</tr>");

for(int i=0;i<redeemVector.size();i++)
{
redeemVector.elementAt(i);
out.println("<tr>");
out.println("<td>"+ redeemVector.get(0) + "</td>");
out.println("<td>"+ redeemVector.get(1) + "</td>");
out.println("<td>"+ redeemVector.get(2) + "</td>");
out.println("<td>"+ redeemVector.get(3) + "</td>");
out.println("<td>"+ redeemVector.get(4)+"-"+ redeemVector.get(5)+"-"+redeemVector.get(6)+ "</td>");
out.println("<td>"+ redeemVector.get(7) + "</td>");
out.println("<td>"+ redeemVector.get(8) + "</td>");
out.println("<td>"+ redeemVector.get(9) + "</td>");
out.println("<td>" +redeemVector.get(10) + "</td>");
out.println("<td>"+redeemVector.get(11)+"</td></tr>");
}

out.println("</table>");


}catch (Exception ex)
{
throw new JspTagException("IOException:" + ex.toString());
}


请问是哪里错了呢???有什么好方法可以更简单的实现数据查询后显示的呢???程序配置没有问题 就是查询或者输出数据库出错。请高手指教 再线等,等不到我不走了啊

22 回复
#2
lewis03232006-11-21 15:04
知道的请帮帮我啊 真心感谢愿意帮助我的人长命百岁,万寿无疆,终生幸福,!!!!天天看美女,日日拣钱包
#3
angeloc2006-11-21 15:12
不清楚你想要做什么,通常ACTION里是做逻辑处理,然后FINDFORWORD到页面去显示。
你的ACITION里面
if(rs.next())
{
redeemDatabase.addElement(rs.getString("idcard"));
redeemDatabase.addElement(rs.getString("name"));
redeemDatabase.addElement(rs.getString("sex"));
redeemDatabase.addElement(rs.getString("folk"));
redeemDatabase.addElement(rs.getString("birthyear"));
redeemDatabase.addElement(rs.getString("birthmonth"));
redeemDatabase.addElement(rs.getString("birthday"));
redeemDatabase.addElement(rs.getString("marriage"));
redeemDatabase.addElement(rs.getString("occupation"));
redeemDatabase.addElement(rs.getString("relativephone"));
redeemDatabase.addElement(rs.getString("privence"));
redeemDatabase.addElement(rs.getString("resume"));
ok=true;
return(mapping.findForward("successredeem"));
}
就是,如果数据库没返回数据的话,你的ACTION是没 RETURN FINDFORWARD的,可能有问题,不过具体不太清楚,你可以调试。
#4
lewis03232006-11-21 16:53
但是我在struts中配置了数据源 在其他类中我不知道 如何得到这个数据源了
请问除了在action中用getDatasSource(request)得到数据源 在其他组件中如何得到数据源?
#5
lewis03232006-11-21 18:34
谁能帮帮我啊 ???现在可以显示display数据了
但是显示不出查询结果
for(int i=0;i<redeemVector.size();i++)
{
redeemVector.elementAt(i);
out.println("<tr>");
out.println("<td>"+ redeemVector.get(0) + "</td>");
out.println("<td>"+ redeemVector.get(1) + "</td>");
out.println("<td>"+ redeemVector.get(2) + "</td>");
out.println("<td>"+ redeemVector.get(3) + "</td>");
out.println("<td>"+ redeemVector.get(4)+"-"+ redeemVector.get(5)+"-"+redeemVector.get(6)+ "</td>");
out.println("<td>"+ redeemVector.get(7) + "</td>");
out.println("<td>"+ redeemVector.get(8) + "</td>");
out.println("<td>"+ redeemVector.get(9) + "</td>");
out.println("<td>" +redeemVector.get(10) + "</td>");
out.println("<td>"+redeemVector.get(11)+"</td></tr>");
}

请问这种方法得到vector中的数据对吗??
#6
神vLinux飘飘2006-11-21 19:50
呵呵,自己不会尝试一下么~~~很简单的问题
#7
lewis03232006-11-21 19:51

谁能帮我解答下呀

#8
lewis03232006-11-21 19:52

版主大哥 我常识了一天 用了各种容器 可是都显示不出查询结果
您发发慈悲 指点一下我吧

#9
神vLinux飘飘2006-11-21 19:55
element = redeemVector.elementAt(i);
点到为止了

#10
lewis03232006-11-21 20:11

我把输出改了

out.println("<tr>");
for(int i=0;i<redeemVector.size();i++)
{
out.println("<td>"+ redeemVector.elementAt(0)+ "</td>");
}

out.println("</tr>");


但是还是显示不出来啊 查询是没问题 我只有输入正确idcard才能进入页面 但是就是不显示
斑竹 我比较笨 您能不能多点下啊
拜托了~~

#11
lewis03232006-11-21 20:15

打错了 是redeemVector.elementAt(i)

#12
lewis03232006-11-21 20:43
有谁和我遇到一样的问题吗?????如果已经解决了请帮帮我啊
#13
千里冰封2006-11-21 20:53
哪一行出这个问题,
还有,把你整个代码帖出来
#14
千里冰封2006-11-21 20:53
哪一行出这个问题,
还有,把你整个代码帖出来
#15
千里冰封2006-11-21 20:53
哪一行出这个问题,
还有,把你整个代码帖出来
正在提交,请稍候
#16
lewis03232006-11-21 21:13

没有显示出问题 但是就是不输出查询结果
我就是想确认下 vector的用法是否正确

package floatingpopulation.tags;

import java.util.Vector;

import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public final class DisplayRedeemTag extends TagSupport{
public int doEndTag() throws JspException
{
JspWriter out = pageContext.getOut();
HttpSession session = pageContext.getSession();
try
{


Vector redeemVector=(Vector)session.getAttribute("redeemVector");

out.println("<table>");
out.println("<tr>");
out.println("<td><b>身份证</b></td>");
out.println("<td><b>姓名<b></td>");
out.println("<td><b>性别</b></td>");
out.println("<td><b>民族</b></th>");
out.println("<td><b>出生日期</b></th>");
out.println("<td><b>婚姻状况</b></th>");
out.println("<td><b>职业</b></th>");
out.println("<td><b>亲属联系方式</b></tddd>");
out.println("<td><b>来自省份</b></td>");
out.println("<td><b>简历</b></td>");
out.println("</tr>");
out.println("<tr>");

for(int i=0;i<redeemVector.size();i++)

{
out.println("<td>"+ redeemVector.elementAt(i)+ "</td>");
}


out.println("</table>");


}catch (Exception ex)
{

}
return super.doEndTag();
}

}

#17
千里冰封2006-11-21 21:17
Vector的用法没有错.你第一页不是有一个classCastException吗?
在哪里报出的
#18
lewis03232006-11-21 21:23
现在没有了 classCastException一般是由转换数据类型引起的吗?
Vector的用法没有错就好 那我明天从头仔细检查下会找到问题在哪的 现在我输入正确的idcard可以进入显示页面(但是就是不能显示查询的结果)
输入错误的idcard就会转到错误页面

这个会是什么引起的呢?

问题2
请问我在配置文件中配置了数据源 在action 可以直接得到Connection 和 DataSource
那么我在模型组件该如何得到这两个呢?
#19
千里冰封2006-11-21 21:28

classCastException是由于类的类型不一样转换时产生的
2,传参数可以传过去

#20
lewis03232006-11-21 22:45

怎么传呢?我们要断电了 明天早上起来看 千里冰封 可以的话 教教我怎么传参数啊? 等你的回复啊

#21
千里冰封2006-11-22 09:17
当然是做为参数传啦


#22
yapzam2006-11-22 19:48
String sql="select * from T_A01 where idcard = "+"'"+idcard+"'";
这个查询语句里的 * 号是不是不应该这么用啊,我以前用的时候就不能
因为当你要从查询结果中取出所有字段时,即用到 rs.getString("字段名"))时
你所要用的所有字段必须在SQL语句中列出来,用到所有的字段名也必须一一列出,用 * 就出错
你可以试一下
#23
千里冰封2006-11-22 20:41

是可以用*代替所有列

不会出错的

1