请给位大神看一下为什么数据库信息为什么查不出来

小z啊 2016-01-26 08:58:06
public class Product {
public static final int PAGE_SIZE=6;
private int id;
private String name;
private String password;
private String sex;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}



/**
* 分页查询所有商品信息
* @param page 页数
* @return List<Product>
* */
public List<Product> find(int page){
List<Product> list=new ArrayList<Product>();
Connection conn=getConnection();
String sql="SELECT TOP PAGE_SIZE* FROM userTable WHERE id NOT IN(SELECT TOP PAGE_SIZE*(page-1) id FROM userTable ORDER BY id)ORDER BY id";
try{
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1,Product.PAGE_SIZE);
ps.setInt(2,(page-1) * Product.PAGE_SIZE);
ResultSet rs=ps.executeQuery();
while(rs.next()){
Product p=new Product();
p.setId(rs.getInt("id"));
p.setName(rs.getString("name"));
p.setPassword(rs.getString("password"));
p.setSex(rs.getString("sex"));
p.setAge(rs.getInt("age"));
list.add(p);
}

if(rs!=null)
{
rs.close();
}
if(ps!=null)
{
ps.close();
}
if(conn!=null)
{
conn.close();
}
}catch(SQLException e){
e.printStackTrace();
}
return list;
}


<html>
<head>
<title>所有学生信息</title>
</head>
<body>
<table align="center" width="450" border="1">
<tr>
<td align="center" colspan="5">
<h2>所有商品信息</h2>
</td>
</tr>
<tr align="center">
<td><b>ID</b></td>
<td><b>姓名</b></td>
<td><b>密码</b></td>
<td><b>性别</b></td>
<td><b>年龄</b></td>
</tr>
<%
@SuppressWarnings("unchecked")
List<Product> list=(List<Product>)request.getAttribute("list");
if(list==null||list.size()<1)
{
out.print("没有数据!");
}else{
for(Product p:list){
%>
<tr align="center">
<td><%=p.getId()%></td>
<td><%=p.getName()%></td>
<td><%=p.getPassword()%></td>
<td><%=p.getSex()%></td>
<td><%=p.getAge()%></td>
</tr>
<%
}
}
%>
<tr>
<td align="center" colspan="5">
<%=request.getAttribute("bar") %>
</td>
</tr>
</table>
</body>
</html>

public void doGet(HttpServletRequest request,
HttpServletResponse response)throws ServletException,
IOException{
response.setContentType("text/html;");
int currPage=1; //当前页码
if(request.getParameter("page")!=null){ //判断传递页码是否有效
currPage = Integer.parseInt(request.getParameter("page")); //对当前页码赋值
}
ProductDao dao=new ProductDao(); //实例化ProductDao
List<Product> list=dao.find(currPage); //查询所有商品信息
request.setAttribute("list", list); //将list放置到request中
int pages; //总页数
int count = dao.findCount(); //查询总记录数
if(count % Product.PAGE_SIZE == 0){ //计算总页数
pages = count / Product.PAGE_SIZE; //对总页数赋值
}else{
pages = count / Product.PAGE_SIZE+1; //对总页数赋值
}
StringBuffer sb=new StringBuffer(); //实例化StringBuffer
for(int i=1;i<pages; i++){ //通过循环构建分页条
if(i == currPage){ //判断是否为当前页
sb.append("["+ i +"]"); //构建分页条
}else{
sb.append("<a href='FindServlet?page="+i+"'>"+i+"</a>"); //构建分页条
}
sb.append(" "); //构建分页条
}
request.setAttribute("bar", sb.toString()); //将分页条的字符串放置到request之中
request.getRequestDispatcher("product_list.jsp").forward(request, response);//转发到product_list.jsp页面
}
}




新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!新手 ,求指点!!!!
...全文
1256 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
shixitong 2016-01-26
  • 打赏
  • 举报
回复
什么问题,贴出来呢
小z啊 2016-01-26
  • 打赏
  • 举报
回复
引用 9 楼 zhangwenchao0814 的回复:
自己粗心了。sql语句写错了,应该是这样的: SELECT TOP 6 * FROM userTable WHERE ID NOT IN (SELECT TOP (6*(2-1)) ID FROM userTable ORDER BY ID DESC) ORDER BY ID DESC,但是这样写查是能查出来,但是sql语句是写死的,不管分几页查出来都是一样的内容。
再麻烦你一下,这个sql语句用问号代替后SELECT TOP ? * FROM userTable WHERE ID NOT IN (SELECT TOP ? ID FROM userTable ORDER BY ID DESC) ORDER BY ID DES,下面的 ps.setInt(1,Product.PAGE_SIZE); ps.setInt(2,(page-1) * Product.PAGE_SIZE);用这两句就有问题了,怎么改啊
shixitong 2016-01-26
  • 打赏
  • 举报
回复
把sql语句写活不就可以了吗 (2-1) 这个2不应该是你的传的页数吗?
小z啊 2016-01-26
  • 打赏
  • 举报
回复
自己粗心了。sql语句写错了,应该是这样的: SELECT TOP 6 * FROM userTable WHERE ID NOT IN (SELECT TOP (6*(2-1)) ID FROM userTable ORDER BY ID DESC) ORDER BY ID DESC,但是这样写查是能查出来,但是sql语句是写死的,不管分几页查出来都是一样的内容。
小z啊 2016-01-26
  • 打赏
  • 举报
回复
我也感觉我的sql语句有问题,放到数据库执行报错了,我是刚开始学习JAVA,麻烦给位大神耐心指点
小z啊 2016-01-26
  • 打赏
  • 举报
回复
引用 4 楼 shixitong 的回复:
要多用debug调试 比如说这边,把最后拼接完的sql在数据库中执行,看看还正确 String sql="SELECT TOP PAGE_SIZE* FROM userTable WHERE id NOT IN(SELECT TOP PAGE_SIZE*(page-1) id FROM userTable ORDER BY id)ORDER BY id";
请问大神,我这个sql语句有问题,应该怎么修改啊?还有我用Debug调试每次一到return list;这里就出错 public List<Product> find(int page){ List<Product> list=new ArrayList<Product>(); Connection conn=getConnection(); String query = "select * from userTable"; String sql="select * from (select a.*, rownum rn from (select * from userTable) a where rownum<= ?) where rn>= ?"; try{ PreparedStatement ps=conn.prepareStatement(sql); ps.setInt(1,Product.PAGE_SIZE); ps.setInt(2,(page-1) * Product.PAGE_SIZE); ResultSet rs=ps.executeQuery(); while(rs.next()){ Product p=new Product(); p.setId(rs.getInt("id")); p.setName(rs.getString("name")); p.setPassword(rs.getString("password")); p.setSex(rs.getString("sex")); p.setAge(rs.getInt("age")); list.add(p); } if(rs!=null) { rs.close(); } if(ps!=null) { ps.close(); } if(conn!=null) { conn.close(); } }catch(SQLException e){ e.printStackTrace(); } return list; }
清泉流 2016-01-26
  • 打赏
  • 举报
回复
引用 4 楼 shixitong 的回复:
要多用debug调试 比如说这边,把最后拼接完的sql在数据库中执行,看看还正确 String sql="SELECT TOP PAGE_SIZE* FROM userTable WHERE id NOT IN(SELECT TOP PAGE_SIZE*(page-1) id FROM userTable ORDER BY id)ORDER BY id";
我觉得4楼说的有道理,我一般在程序中写sql语句的话,会先在sqlserver等数据库中执行一遍,他会提示语句可能在哪出错,如果不是sql语句的话就是下面处理有问题,一步一步的来
shixitong 2016-01-26
  • 打赏
  • 举报
回复
PreparedStatement ps 的ps.setInt这些,你sql语句中参数要以代替,这边你都把值传入sql语句了,就不用set了,还是看看你最终执行的sql语句是否正确
shixitong 2016-01-26
  • 打赏
  • 举报
回复
要多用debug调试 比如说这边,把最后拼接完的sql在数据库中执行,看看还正确 String sql="SELECT TOP PAGE_SIZE* FROM userTable WHERE id NOT IN(SELECT TOP PAGE_SIZE*(page-1) id FROM userTable ORDER BY id)ORDER BY id";
小z啊 2016-01-26
  • 打赏
  • 举报
回复
数据库连接成功 com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setterGetParam(SQLServerPreparedStatement.java:700) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setValue(SQLServerPreparedStatement.java:709) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.setInt(SQLServerPreparedStatement.java:870) at com.fenye.conn.ProductDao.find(ProductDao.java:45) at com.fenye.servlet.FindServlet.doGet(FindServlet.java:36) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445) at java.lang.Thread.run(Thread.java:619) 数据库连接成功
小z啊 2016-01-26
  • 打赏
  • 举报
回复
请过路大神瞅瞅
小z啊 2016-01-26
  • 打赏
  • 举报
回复
小z啊 2016-01-26
  • 打赏
  • 举报
回复
引用 15 楼 qq_21992489 的回复:
话说回来 你这样分页 真的好吗。。。 建议还是一次性把所有数据查出来 然后在页面面上 通过jquery 把数据分页
呃,我刚开始学这个,很多不太明白,谢谢你 !!!
小z啊 2016-01-26
  • 打赏
  • 举报
回复
引用 13 楼 zhangwenchao0814 的回复:
[quote=引用 12 楼 shixitong 的回复:] 什么问题,贴出来呢
这是代码: public List<Product> find(int page){ List<Product> list=new ArrayList<Product>(); Connection conn=getConnection(); String sql="SELECT TOP ? * FROM userTable WHERE ID NOT IN (SELECT TOP ? ID FROM userTable ORDER BY ID DESC) ORDER BY ID DESC"; try{ PreparedStatement ps=conn.prepareStatement(sql); ps.setInt(1,Product.PAGE_SIZE); ps.setInt(2,(page-1) * Product.PAGE_SIZE); 如果将这两句拿掉将问号改成数字就可以查出来,但是查出来的内容不管分级也都是一样的 ResultSet rs=ps.executeQuery(); while(rs.next()){ Product p=new Product(); p.setId(rs.getInt("id")); p.setName(rs.getString("name")); p.setPassword(rs.getString("password")); p.setSex(rs.getString("sex")); p.setAge(rs.getInt("age")); list.add(p); } if(rs!=null) { rs.close(); } if(ps!=null) { ps.close(); } if(conn!=null) { conn.close(); } }catch(SQLException e){ e.printStackTrace(); } return list; } 这是错误提示: 数据库连接成功 com.microsoft.sqlserver.jdbc.SQLServerException: '@P0' 附近有语法错误。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197) at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:390) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:283) at com.fenye.conn.ProductDao.find(ProductDao.java:47) at com.fenye.servlet.FindServlet.doGet(FindServlet.java:36) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445) at java.lang.Thread.run(Thread.java:619) 数据库连接成功 [/quote] 成功了,真的非常感谢你,千言万语难表心头感激之言,还望以后不吝赐教
小z啊 2016-01-26
  • 打赏
  • 举报
回复
引用 14 楼 shixitong 的回复:
String sql="SELECT TOP "+Product.PAGE_SIZE+" * FROM userTable WHERE ID NOT IN (SELECT TOP "+(page-1) * Product.PAGE_SIZE+" ID FROM userTable ORDER BY ID DESC) ORDER BY ID DESC"; 不用ps.setInt了
谢谢你,终于查出来了,感谢感谢
qq_21992489 2016-01-26
  • 打赏
  • 举报
回复
话说回来 你这样分页 真的好吗。。。 建议还是一次性把所有数据查出来 然后在页面面上 通过jquery 把数据分页
shixitong 2016-01-26
  • 打赏
  • 举报
回复
String sql="SELECT TOP "+Product.PAGE_SIZE+" * FROM userTable WHERE ID NOT IN (SELECT TOP "+(page-1) * Product.PAGE_SIZE+" ID FROM userTable ORDER BY ID DESC) ORDER BY ID DESC"; 不用ps.setInt了
小z啊 2016-01-26
  • 打赏
  • 举报
回复
引用 12 楼 shixitong 的回复:
什么问题,贴出来呢
这是代码: public List<Product> find(int page){ List<Product> list=new ArrayList<Product>(); Connection conn=getConnection(); String sql="SELECT TOP ? * FROM userTable WHERE ID NOT IN (SELECT TOP ? ID FROM userTable ORDER BY ID DESC) ORDER BY ID DESC"; try{ PreparedStatement ps=conn.prepareStatement(sql); ps.setInt(1,Product.PAGE_SIZE); ps.setInt(2,(page-1) * Product.PAGE_SIZE); 如果将这两句拿掉将问号改成数字就可以查出来,但是查出来的内容不管分级也都是一样的 ResultSet rs=ps.executeQuery(); while(rs.next()){ Product p=new Product(); p.setId(rs.getInt("id")); p.setName(rs.getString("name")); p.setPassword(rs.getString("password")); p.setSex(rs.getString("sex")); p.setAge(rs.getInt("age")); list.add(p); } if(rs!=null) { rs.close(); } if(ps!=null) { ps.close(); } if(conn!=null) { conn.close(); } }catch(SQLException e){ e.printStackTrace(); } return list; } 这是错误提示: 数据库连接成功 com.microsoft.sqlserver.jdbc.SQLServerException: '@P0' 附近有语法错误。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197) at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:390) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:283) at com.fenye.conn.ProductDao.find(ProductDao.java:47) at com.fenye.servlet.FindServlet.doGet(FindServlet.java:36) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445) at java.lang.Thread.run(Thread.java:619) 数据库连接成功

81,091

社区成员

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

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