LINUX.ORG.RU

JSP. Empty result set.


0

1

Написал код (почти сам :D):

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.sql.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
Class.forName("com.mysql.jdbc.Driver");

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/gb","root","zaz222");
%>


<h1>My first FORM</h1>
<form method="POST">
    <input name='name' type='text' maxlength='30'><br>
        <textarea name="text" rows="4" cols="20"></textarea>
    <input type='submit' value='OK'>
</form>
<br><br><br>

<%
String name=request.getParameter("name");
String text=request.getParameter("text");
Statement stmt=conn.createStatement();
if(name!=null && text!=null)
{
    int id_user=0;
    ResultSet rs=stmt.executeQuery("SELECT ID FROM user WHERE NAME='"+name+"'");
    rs.next();
    id_user=rs.getInt("ID");

    if(id_user!=0)
    {
        stmt.executeUpdate("INSERT INTO message SET TEXT='"+text+"',ID_USER='"+id_user+"',TIME=NOW()");
    }

    rs.close();
}

out.print("<br><br>");

ResultSet mess=stmt.executeQuery("SELECT * FROM message M,user U WHERE U.ID=M.ID_USER");

while(mess.next())
{
    out.print("Name: "+mess.getString("NAME")+"<br>");
    out.print("Time: "+mess.getString("TIME")+"<br>");
    out.print("Message: "+mess.getString("TEXT")+"<br>");
    out.print("<hr>");
}
mess.close();
%>
</body>
</html>
<%
stmt.close();
conn.close();
%>
Вроде бы все правильно, настроил БД (а тут не знаю). Формы и кнопки появляются. Но после нажатия на кнопку GlassFish выдает ошибку:
HTTP Status 500 -

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.sql.SQLException: Illegal operation on empty result set.
root cause

java.sql.SQLException: Illegal operation on empty result set.
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 3.0.1 logs.

GlassFish Server Open Source Edition 3.0.1
В чем дело? Если в неправильно настроенной БД, то скажите как правильно настроить (весь код :D)...

P.S За книгой по MySQL пойду в воскресенье :)

★★

Ответ на: комментарий от guilder

Но возможно не правильно, поэтому прошу помощи по правильной настройке...

intel ★★
() автор топика
Ответ на: комментарий от intel

для начала выполните аналогичный запрос ручками, если селект возвращает пусто уже тогда то ССЗБ

используйте if (!rs.next()) { // handle empty ResultSet here }

x0r ★★★★★
()
Ответ на: комментарий от x0r

Если ничего не набрано, то выводит Hello!

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.sql.*"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
Class.forName("com.mysql.jdbc.Driver");

Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/gb","root","zaz222");
%>


<h1>My first FORM</h1>
<form method="POST">
    <input name='name' type='text' maxlength='30'><br>
        <textarea name="text" rows="4" cols="20"></textarea>
    <input type='submit' value='OK'>
</form>
<br><br><br>

<%
String name=request.getParameter("name");
String text=request.getParameter("text");
Statement stmt=conn.createStatement();
if(name!=null && text!=null)
{
    int id_user=0;
    ResultSet rs=stmt.executeQuery("SELECT ID FROM user WHERE NAME='"+name+"'");
    rs.next();
    if (!rs.next()) { out.println("Hello!"); }
    }
%>
</body>
</html>

Я думаю дело в БД...

intel ★★
() автор топика
Ответ на: комментарий от intel

строка 3 тут лишняя:

int id_user=0;
ResultSet rs=stmt.executeQuery("SELECT ID FROM user WHERE  NAME='"+name+"'");
rs.next();
if (!rs.next()) { out.println("Hello!"); }

а теперь переведи переключатель голова/зад в состояние голова и подумай сам

x0r ★★★★★
()

О майн гад. Я надеюсь, ты такой код больше писать не будешь? о_)

dizza ★★★★★
()

ResultSet rs=stmt.executeQuery(«SELECT ID FROM user WHERE NAME='»+name+«'»); rs.next(); id_user=rs.getInt(«ID»);

rs.next() лишнее.

ResultSet rs=stmt.executeQuery(«SELECT ID FROM user WHERE NAME='»+name+«'»); ... stmt.executeUpdate(«INSERT INTO message SET TEXT='»+text+«',ID_USER='»+id_user+«',TIME=NOW()»);

Используй вместо Statement PreparedStatement

ma1uta ★★★
()
Ответ на: комментарий от ma1uta

И не пиши код в jsp, лучше выноси его другой слой.

ma1uta ★★★
()

такое... самобытное... использование JSP до добра не доведет.

прочитай уже какой-нибудь гид как писать JSP. Заодним поймешь, почему JSP - это не PHP :)


даже на русском языке было, я гарантирую это.

Девид Гери, «Библиотека профессионала: Java Server Pages» из серии Sun

Дейтл, Сантри, «Технологии программирования на Java 2: книга 3, корпоративные системы, сервлеты, JSP, веб-сервисы»

там жабка конечно старая, но для твоих целей пойдёт ок


stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.