2015-03-15 2 views
1

Я пытаюсь напечатать некоторые данные из моей базы данных в Mysql, используя некоторые классы в java и jsp. Я впервые это делаю. Я много гулял, но ничего не помогло. Вот мой код:Попытка проверить базу данных MySQL с помощью java, jsp

index.html

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Index</title> 
</head> 
<body> 
    <form action="DB_results.jsp"> 
     <input type = "submit" value = "Database"> 
    </form> 
</body> 
</html> 

Draw.java

package DB_draw; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

public class Draw { 
    ResultSet myRs; 

    public ResultSet getMyRs() { 
     return myRs; 
    } 

    public void setMyRs() { 
     try{ 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/tst","root",""); 

      Statement myStmt = myConn.createStatement(); 

      this.myRs = myStmt.executeQuery("select * from tst.people"); 

      while (this.myRs.next()) 
      { 
       System.out.println(this.myRs.getString("onoma") + " " + this.myRs.getString("epitheto") + " " + this.myRs.getInt("id")); 
      } 
     } 

     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

DB_results.jsp

<%@page import="java.sql.ResultSet"%> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
    <%@ 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"%> 
<%@ page import="DB_draw.*" %> 

<jsp:useBean id="DB_draw" class="DB_draw.Draw" scope="session" /> 
<jsp:setProperty name="DB_draw" property="*"/> 

<!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=ISO-8859-1"> 
<title>Database</title> 
</head> 
<body style="background-color:black"> 
<div style = "color:yellow; font-family:fantasy; font-size:30px"> 
    <% 
     ResultSet myRs = DB_draw.getMyRs(); 
     if(myRs == null) out.println("Problem"); 
     else 
      while(myRs.next()) 
      { 
       out.println(myRs.getString("onoma") + " " + myRs.getString("epitheto") + " " + myRs.getInt("id")); 
      } 
    %> 
</div> 
</body> 
</html> 

Проблема заключается в том, что при попытке распечатать результаты в DB_results.jsp с использованием переменной myRs myRs == NULL. Почему это происходит? Я использую Tomcat-Apache 8.0.

ответ

1

Вы никогда не звоните setMyRS(). И даже если вы это сделали, setMyRS() выполняет итерацию по набору результатов, поэтому myRs.next() всегда будет возвращать false в JSP.

+0

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

+0

Вызовите его перед вызовом getMyRS(), так как в противном случае getMyRS() возвращает null. Или создайте и верните RS из getMyRS() и удалите метод setMyRS(). Зачем вам нужно поле для хранения набора результатов? Кроме того, setMyRS() не является сеттером. Сеттер принимает аргумент. Наконец, прочитайте о MVC. У вас никогда не должно быть Java-кода в JSP. jsp: useBean больше не должен использоваться. jsp: setProperty еще меньше. Вы программируете, как если бы мы были в 1999 году. –

+0

Я пробовал оба из того, что вы предложили. Все та же проблема. Я знаю, что проблема заключается в настройке набора результатов, как вы сказали в первый раз. –

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