2015-02-08 80 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