2016-06-30 3 views
0

мой код разбиения на страницы принимает значение номера страницы из html-файла и показывает конкретную страницу с логикой разбиения на страницы из таблицы sql-базы данных. Я привел код здесь, после чего появилась ошибка. Пожалуйста, помогите . Спасибо заранее!Мой код показывает ошибку

<%@ page contentType="text/html; charset=iso-8859-1" language="java"       import="java.sql.*" errorPage="" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<form id="form1" name="form1" method="post" action=""> 
<table width="100%" border="0" cellpadding="0" cellspacing="0"  bgcolor="#CCCCCC"> 
    <tr bgcolor="#66FF99"> 
    <td>Sr.</td> 
    <td>Name</td> 
    <td>Cost</td> 

</tr> 




<% 


int p= Integer.parseInt(request.getParameter("textfield")); 
Class.forName("com.mysql.jdbc.Driver"); 
Connection con=DriverManager.getConnection("jdbc:mysql://localhost/tiop","root","root"); 
Statement stat=con.createStatement(); 
ResultSet rs=stat.executeQuery("select * From (select * , Row_Number() over (order by Sr) as RowNum From cre)T where T.RowNum between ((p-1)*5)+1 
and (p*5)"); 

while(rs.next()) 
{ 



%> 
<tr> 
    <td bgcolor="#99CC33"><%=rs.getInt(1)%></td> 
    <td bgcolor="#669966"><%=rs.getString(2)%></td> 
    <td bgcolor="#FF3333"><%=rs.getInt(3)%></td> 

</tr> 

<% 
} 

%> 
</table> 
</form> 
</body> 
</html> 

Ошибка показано:

HTTP Status 500 - Unable to compile class for JSP: 

type Exception report 

message Unable to compile class for JSP: 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 29 in the jsp file: /pa.jsp 
String literal is not properly closed by a double-quote 
26: Class.forName("com.mysql.jdbc.Driver"); 
27: Connection con=DriverManager.getConnection("jdbc:mysql://localhost/tiop","root","root"); 
28: Statement stat=con.createStatement(); 
29: ResultSet rs=stat.executeQuery("select * From (select * , Row_Number() over (order by Sr) as RowNum From cre)T where T.RowNum between ((p-1)*5)+1 
30: and (p*5)"); 
31: 
32: while(rs.next()) 


Stacktrace: 
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103) 
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:199) 
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:446) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:361) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:336) 
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:323) 
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
note The full stack trace of the root cause is available in the Apache Tomcat/8.0.9 logs. 

Apache Tomcat/8.0.9 
+1

Просто, чтобы удалить очевидное: пытались ли вы поместить линию 30 в строку 29? (i, e, не заканчивайте строку, где у вас есть, но чтобы поставить весь запрос в ту же строку) – Barranka

+0

@Barranka я попытался, но я не знаю, почему я не могу поставить строку 29 в строке 30 в блокнот –

+0

@ Barranka i включил запрос в ту же строку, но он по-прежнему показывает ту же ошибку. –

ответ

0

доказательство не-ошибок proof of no-errors

Решение: скопировать и вставить следующее: @Barranka был прав слишком

String query = "select * From (select * , Row_Number() over (order by Sr) as RowNum From cre)T where T.RowNum between ((p-1)*5)+1 and (p*5)"; 
ResultSet rs = stat.executeQuery(query); 

Если вы не можете поместить полную select-query в одну строку. Сделайте следующее:

ResultSet rs = stat.executeQuery("select * From (select * , Row_Number() over (order by Sr) as RowNum From cre)T where T.RowNum between ((p-1)*5)+1" + 
"add (p*5)"); 

Где была проблема?

Предложил StackTrace «строковый литерал не закрыта двойной кавычки»

На XXX маркера в следующей строке. Эта проблема вызвала разлад. and (p*5)" был на следующей линии без конкатенации.

"select * From (select * , Row_Number() over (order by Sr) as RowNum From cre)T where T.RowNum between ((p-1)*5)+1 
XXX and (p*5)" 

Для простоты: магазина вашего запроса в String, сцепить несколько запросов, упростить длинные запросы и использовать их при выполнении запроса. Кроме того, помогает повторно использовать этот запрос.

+0

спасибо большое, но у меня есть попробовал это, и он все еще показывает ошибку –

+0

Покажите мне доказательство на рис. Или ошибка может быть другой. – rupinderjeet

Смежные вопросы