2015-02-08 74 views
0

我想从jsp页面上的mysql数据库检索数据,当页面加载时,它加载最新数据(这是我想要的),但是当我点击在刷新按钮上,我使用旧数据刷新表格,然后该按钮不起作用(不刷新表格)。在jsp中用按钮刷新mysql表

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ page import="java.sql.*, javax.sql.*, java.io.*, javax.naming.*"%> 


<!DOCTYPE html> 
<html> 
<head> 
<title>Main Page</title> 
<h1> 
    <strong>test page</strong> 
</h1> 
<hr /> 
<canvas id="mycanvas" width="400" height="186"></canvas> 
<script src="JavaScript/smoothie.js"></script> 
<script src="JavaScript/chart.js"></script> 
<script src="JavaScript/basic.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 

<script> 
    $(document).ready(function(){ 
     $("#refresh").click(function(){ 
      $("#heart_rate").load("basic2.jsp")        
      }); 
     }); 
    </script> 
</head> 
<body> 
    <br> 
    <br> 
    <button id="refresh">Refresh table</button> 
    <br> 
    <br> 
    <form method="post" name="form"> 
     <table id="heart_rate" border="1"> 
      <tr> 
       <th>Sensor id</th> 
       <th>Time stamp</th> 
       <th>Heart rate</th> 
       <th>Event time</th> 
      </tr> 
      <% 
Connection con = null; 
String url = "jdbc:mysql://localhost:3306/"; 
String db = "Avantidrome"; 
String driver = "com.mysql.jdbc.Driver"; 
String un ="root"; 
String pw="root"; 
Statement st; 
try{ 
    Class.forName(driver).newInstance(); 
    con = DriverManager.getConnection(url + db, un, pw); 
    String sql = "select * from avantidrome.heartratedata order by timestamp DESC limit 10"; 
    st = con.createStatement(); 
    ResultSet rs = st.executeQuery(sql); 
    %> 
      <% 
    while(rs.next()) 
    { 
     %> 
      <tr> 
       <td><%=rs.getString(1)%></td> 
       <td><%=rs.getString(2)%></td> 
       <td><%=rs.getString(4)%></td> 
       <td><%=rs.getString(5)%></td> 
      </tr> 
      <% 
      } 

    %> 
      <% 
    } catch(Exception e){ 
     e.printStackTrace(); 
     } 
%> 
     </table> 
    </form> 


</body> 

</html> 

一旦按钮被点击它调用basic.jsp这仅仅是:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ page import="java.sql.*, javax.sql.*, java.io.*, javax.naming.*"%> 
<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 
    <br> 
    <br> 
    <form method="post" name="form"> 
     <table id="heart_rate" border="1"> 
      <tr> 
       <th>Sensor id</th> 
       <th>Time stamp</th> 
       <th>Heart rate</th> 
       <th>Event time</th> 
      </tr> 
      <% 
Connection con = null; 
String url = "jdbc:mysql://localhost:3306/"; 
String db = "Avantidrome"; 
String driver = "com.mysql.jdbc.Driver"; 
String un ="root"; 
String pw="root"; 
Statement st; 
try{ 
    Class.forName(driver).newInstance(); 
    con = DriverManager.getConnection(url + db, un, pw); 
    String sql = "select * from avantidrome.heartratedata order by timestamp DESC limit 10"; 
    st = con.createStatement(); 
    ResultSet rs = st.executeQuery(sql); 
    %> 
      <% 
    while(rs.next()) 
    { 
     %> 
      <tr> 
       <td><%=rs.getString(1)%></td> 
       <td><%=rs.getString(2)%></td> 
       <td><%=rs.getString(4)%></td> 
       <td><%=rs.getString(5)%></td> 
      </tr> 
      <% 
      } 

    %> 
      <% 
    } catch(Exception e){ 
     e.printStackTrace(); 
     } 
%> 
     </table> 
    </form> 


</body> 

</html> 

所有它需要做的是按钮,从数据库中选择最新的数据并返回到表被点击时。

+0

快问,你为什么不使用servlet? – 2015-02-08 23:19:24

回答

0

有两种方法可以做到你想要什么:

  1. 当用户按下刷新按钮,你简单的刷新页面(这应该是如此之快,他不会注意到页面改变)
  2. 使用ajax。所以,如果选择这个选项,你需要明白为了做到这一点,你只需要一个jsp(一个在开始加载页面并具有刷新按钮的jsp),一个处理刷新按钮并使用ajax获取的JavaScript脚本新数据以及接收ajax请求并在json/xml中返回包含更新的ajax响应的servlet。

在我看来,我更喜欢第一种选择,但如果你选择去第二个,继承人另一SO后,可以帮助你:How to use Servlets and Ajax?

+0

此外,如果您选择第二个,则应该阻止刷新按钮,而不接收来自该servlet的ajax响应。 – 2015-02-08 23:31:16