gpt4 book ai didi

mysql - 在jsp中将数据库表显示为rankingtable

转载 作者:行者123 更新时间:2023-11-29 22:36:09 25 4
gpt4 key购买 nike

我需要实现一个数据库查询,它可以返回玩家的用户名、分数和排名。由于我没有直接存储在数据库中的排名,所以我必须通过玩家的分数来计算它。

有一个我不明白的 SQL 语法错误。

有人可以告诉我如何使用 java servlet 进行数据库连接。并在jsp中显示结果。

我使用 MySql 5.6.21 和 Tomcat 7。

有人可以帮我吗?

现在我在回溯中收到一个新错误,我确信这是因为准备好的语句是错误的,但我该如何修复它。对于我来说,在 java servlet 中执行此操作会更容易,但我需要直接在此页面上获得结果。

排名.jsp

    <!DOCTYPE html>
<html lang="en">
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

<head>

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="Nicolas Almy">

<title>Sweep-It | Ranking</title>

<!-- Custom CSS -->
<link href="css/screen.css" rel="stylesheet">

<!-- Bootstrap Core CSS -->
<link href="css/bootstrap.min.css" rel="stylesheet">

<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

<!-- Bootstrap Core JavaScript -->
<script src="js/bootstrap.min.js"></script>

<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->

</head>

<body>

<!-- Navigation -->
<div id="navbar-outer">
<nav class="navbar navbar-inverse" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="collapse navbar-collapse" id="navbar">
<ul class="nav navbar-nav">
<li>
<a href="index.html">Home</a>
</li>
<li>
<a href="ranking.jsp">Ranking</a>
</li>
<li>
<a href="howtoplay.html">How to play</a>
</li>
<li>
<a href="aboutus.html">About us</a>
</li>
</ul>
<!--
<ul class="nav navbar-nav navbar-right">
<li><a href="#"><span class="glyphicon glyphicon-user"></span> Register</a></li>
<li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>
</ul> -->
</div>
</div>
</nav>
</div>
<!-- Page Content -->
<div class="container">
<div class="row">
<div class="col-sm-12" id="welcome-text">
<div class="box">
<p class="box-text">On this page you can see which ones are the top players at the moment. If you are logged in you can see your own statics.</p>

<!-- SELECT * from user Order by rating DESC; -->
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/sweepit"
user="root" password="AbA011"
/>

<c:set var="prevValue" value="NULL" />
<c:set var="rankCount" value="0" />

<sql:query dataSource="${snapshot}" var="result">

SELECT UserId, Rating, Username,
CASE
WHEN prevValue = Rating THEN rankCount
WHEN prevValue = Rating THEN rankCount = rankCount + 1
END AS rank
FROM user
ORDER BY Rating

<sql:param value="$prevalue" />
<sql:param value="$rankCount" />

</sql:query>

<div id="table-div">
<table id="table-ranking" border="1" >
<tr>
<th>Rank</th>
<th>Username</th>
<th>Score</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr class="box-text">
<td><c:out value="${row.rank}"/></td>
<td><c:out value="${row.username}"/></td>
<td><c:out value="${row.rating}"/></td>
</tr>
</c:forEach>
</table>
</div>
</div>
</div>
</div>
<!-- /.row -->

</div>
<!-- /.container -->

</body>

</html>

用户.sql

create table `User` (
`UserId` int auto_increment NOT NULL,
`Username` varchar(25) NOT NULL,
`RegistrationDate` datetime NOT NULL DEFAULT NOW(),
`Email` varchar(50) NOT NULL,
`Authorization` enum('Admin', 'Default', 'Guest') NOT NULL,
`Rating` int NOT NULL DEFAULT 0,
`Password` varchar(32) NOT NULL,
PRIMARY KEY (`UserId`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=UTF8;

错误的堆栈跟踪

  Apr 10, 2015 8:58:56 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [jsp] in context with path [/sweepit] threw exception [javax.servlet.ServletException: javax.servlet.jsp.JspException:

SELECT UserId, Rating, Username,
CASE
WHEN prevValue = Rating THEN rankCount
WHEN prevValue = Rating THEN rankCount = rankCount + 1
END AS rank
FROM user
ORDER BY Rating




: Parameter index out of range (1 > number of parameters, which is 0).] with root cause
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3711)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3695)
at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4546)
at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3950)
at org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.setParameters(QueryTagSupport.java:304)
at org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doEndTag(QueryTagSupport.java:223)
at org.apache.jsp.ranking_jsp._jspx_meth_sql_005fquery_005f0(ranking_jsp.java:352)
at org.apache.jsp.ranking_jsp._jspService(ranking_jsp.java:184)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

最佳答案

您忘记了 SQL 查询中 Username 和 CASE 之间的逗号。

                SELECT UserId, Rating, Username,
CASE
WHEN prevValue = Rating THEN rankCount
WHEN prevValue := Rating THEN rankCount := rankCount + 1
END AS rank
FROM user
ORDER BY Rating

关于mysql - 在jsp中将数据库表显示为rankingtable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29541071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com