这里涉及到两张表,一张帖子,一张用户表。下面主要是想查询出用户发的帖子的标题.数据库通过登录时session等到的userName来查询用户所发的帖子。下面是我写的查询代码。(帖子表中的PostSender和用户表中的UserName 是相等的)但是运行时会报错,错误代码在下面。我不知道怎么错的,请大家教教我啊···
public List<Poster> listpraPost(String userName) throws SQLException {
ArrayList<Poster> postList = new ArrayList<Poster>();
Connection conn = null;
PreparedStatement stat = null;
ResultSet rst = null;
Poster poster = new Poster();
User user=new User();
try {
conn = db.getConnection();
stat = conn.prepareStatement("select PostTitle from Bbs_Post,tbl_Assistant where Bbs_Post.PostSender=tbl_Assistant.UserName and UserName=? ");
stat.setString(1,poster.getPostTitle());
stat.setString(2,userName);
rst=stat.executeQuery();
while (rst.next()) {
poster.setPostTitle(rst.getString(1));
user.setUserName(rst.getString(2));
//poster.setPostSender(rst.getString(2));
postList.add(poster);
}
} finally {
DB.release(conn, stat, rst);
}
return postList;
}
JSP页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.sql.*"
pageEncoding="UTF-8"%>
<%@page import="valuebean.User" %>
<%@page import="dao.UsersDao" %>
<%@page import="valuebean.Poster" %>
<%@page import="dao.PostDao" %>
<jsp:useBean id="connBean" scope="page" class="db.connDB"/>
<%-- <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> --%>
<%
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ request.getContextPath() + "/";
/* User user=new User();
Poster poster=new Poster(); */
%><%
String userName=(String)session.getAttribute("userName");
User user=new User();
UsersDao usersdao=new UsersDao();
user=usersdao.selectInfo(userName);
String userName1=(String)user.getUserName();
int grade=user.getGrade();
Poster poster=new Poster();
PostDao postdao=new PostDao();
postdao.listpraPost(userName);
String posttitle=poster.getPostTitle();
%>
下面的代码省略···
错与提示:org.apache.jasper.JasperException: An exception occurred processing JSP page /front/myplace.jsp at line 2623: int grade=user.getGrade();
24: Poster poster=new Poster();
25: PostDao postdao=new PostDao();
26: postdao.listpraPost(userName);
27: String posttitle=poster.getPostTitle();
28: %>
29:
Stacktrace:
at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:456)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at servlet.placearea.doPost(placearea.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:279)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.servlet.ServletException: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:911)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:840)
at org.apache.jsp.front.myplace_jsp._jspService(myplace_jsp.java:290)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
... 28 more
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.validateParameterIndex(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.setObjectInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.setString(Unknown Source)
at dao.PostDao.listpraPost(PostDao.java:54)
at org.apache.jsp.front.myplace_jsp._jspService(myplace_jsp.java:101)
... 31 more
public List<Poster> listpraPost(String userName) throws SQLException {
ArrayList<Poster> postList = new ArrayList<Poster>();
Connection conn = null;
PreparedStatement stat = null;
ResultSet rst = null;
Poster poster = new Poster();
User user=new User();
try {
conn = db.getConnection();
stat = conn.prepareStatement("select PostTitle from Bbs_Post,tbl_Assistant where Bbs_Post.PostSender=tbl_Assistant.UserName and UserName=? ");
stat.setString(1,poster.getPostTitle());
stat.setString(2,userName);
rst=stat.executeQuery();
while (rst.next()) {
poster.setPostTitle(rst.getString(1));
user.setUserName(rst.getString(2));
//poster.setPostSender(rst.getString(2));
postList.add(poster);
}
} finally {
DB.release(conn, stat, rst);
}
return postList;
}
JSP页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.sql.*"
pageEncoding="UTF-8"%>
<%@page import="valuebean.User" %>
<%@page import="dao.UsersDao" %>
<%@page import="valuebean.Poster" %>
<%@page import="dao.PostDao" %>
<jsp:useBean id="connBean" scope="page" class="db.connDB"/>
<%-- <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> --%>
<%
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ request.getContextPath() + "/";
/* User user=new User();
Poster poster=new Poster(); */
%><%
String userName=(String)session.getAttribute("userName");
User user=new User();
UsersDao usersdao=new UsersDao();
user=usersdao.selectInfo(userName);
String userName1=(String)user.getUserName();
int grade=user.getGrade();
Poster poster=new Poster();
PostDao postdao=new PostDao();
postdao.listpraPost(userName);
String posttitle=poster.getPostTitle();
%>
下面的代码省略···
错与提示:org.apache.jasper.JasperException: An exception occurred processing JSP page /front/myplace.jsp at line 2623: int grade=user.getGrade();
24: Poster poster=new Poster();
25: PostDao postdao=new PostDao();
26: postdao.listpraPost(userName);
27: String posttitle=poster.getPostTitle();
28: %>
29:
Stacktrace:
at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:456)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at servlet.placearea.doPost(placearea.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:279)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.servlet.ServletException: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:911)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:840)
at org.apache.jsp.front.myplace_jsp._jspService(myplace_jsp.java:290)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
... 28 more
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.validateParameterIndex(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.setObjectInternal(Unknown Source)
at com.microsoft.jdbc.base.BasePreparedStatement.setString(Unknown Source)
at dao.PostDao.listpraPost(PostDao.java:54)
at org.apache.jsp.front.myplace_jsp._jspService(myplace_jsp.java:101)
... 31 more
解决方案 »
- <s:iterator value="list" >我要输出一个序号,不是id,怎么写?请各位帮帮忙
- Jsp文件上传问题
- 在java中连接数据库出现问题,不知是啥原因
- 求求各位高手帮帮忙。关于JSP从数据库中读取的数据显示为乱码的问题
- jsp上传问题请教急
- 在页面上输入信息后,怎样在数据库里插入当前时间呀?? 我等~~~~`!谢谢
- 高兴+散分+提问
- 在CSDN里走了一遭,发现我们JSP这里的人是最穷的!
- 大菜鸟请教配置tomcat和jdk问题
- 配置tomcat4.1.12的一个问题
- 关于过滤器配置的错误 The Struts dispatcher cannot be found
- 网上书店系统的技术路线
看看你的 Sql 语句是不是有问题 ,其他真看不出来 了
看了你的listpraPost类,发现几个问题
1. select PostTitle from Bbs_Post,tbl_Assistant where Bbs_Post.PostSender=tbl_Assistant.UserName and UserName=? 。。别名用错了。。
改为:
select PostTitle from Bbs_Post bp,tbl_Assistant ta where bp.PostSender=ta.UserName and ta.UserName=? 2. while (rst.next()) {
poster.setPostTitle(rst.getString(1));
user.setUserName(rst.getString(2));
//poster.setPostSender(rst.getString(2));
postList.add(poster);
} 查出的数据存入对象时每个都要实例化。。不然存入list中的始终只有一个
改为:
while (rst.next()) {
Poster poster = new Poster();
poster.setPostTitle(rst.getString(1));
user.setUserName(rst.getString(2));
//poster.setPostSender(rst.getString(2));
postList.add(poster);
}3. jsp中:
Poster poster=new Poster(); //这里new了一个Poster以后啥都没做。。
PostDao postdao=new PostDao();
postdao.listpraPost(userName);
String posttitle=poster.getPostTitle(); // 上面posternew出来啥没做。这里何来值取?改为:
Poster poster=null;
ArrayList<Poster> postList =postdao.listpraPost(userName);
for(...) // 自己写一个循环取出Poster对象
// 自己写一个取出Poster对象为poster赋值
String posttitle=poster.getPostTitle(); // 这样取就有值了其他的LZ自己好好研究吧。。
stat.setString(1,poster.getPostTitle());
stat.setString(2,userName);
根据异常信息
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid parameter binding(s).
查找以上代码发现sql指定一个参数却set两个参数,因此报错
楼上说的问题虽然可能不会导致抛异常,但也是很低级的错误,希望lz加把力。
select PostTitle from Bbs_Post,tbl_Assistant where Bbs_Post.PostSender=tbl_Assistant.User
应该是
select p.PostTitle from Bbs_Post p ,tbl_Assistant t where p.PostSender=t.User