通過網上查找資料和求助大神幫助,終於完成了簡單的數據有后台傳遞到前台的操作。


左圖,是網頁顯示結果,右圖是數據庫中的數據。
工程目錄結構

數據庫實體類 主要包含了數據庫中對應的表的字段(Table.java)。
1 package demo4.entity; 2 3 public class Table { 4 5 private String id; 6 private String name; 7 private int age; 8 private String sex; 9 10 public Table(){} 11 12 public Table(String id, String name, int age, String sex){ 13 this.id = id; 14 this.name = name; 15 this.age = age; 16 this.sex = sex; 17 } 18 19 public String getId() { 20 return id; 21 } 22 23 public void setId(String id) { 24 this.id = id; 25 } 26 27 public String getName() { 28 return name; 29 } 30 31 public void setName(String name) { 32 this.name = name; 33 } 34 35 public int getAge() { 36 return age; 37 } 38 39 public void setAge(int age) { 40 this.age = age; 41 } 42 43 public String getSex() { 44 return sex; 45 } 46 47 public void setSex(String sex) { 48 this.sex = sex; 49 } 50 51 52 }
數據庫操作類: (TableDao.java)
package demo4.dao; import java.sql.*; import java.util.*; import demo4.entity.*; public class TableDao { public List readTable(){ List<Table> list = new ArrayList<Table>(); Connection conn = null; PreparedStatement stat = null; ResultSet rs = null; try{ Class.forName("com.mysql.jdbc.Driver"); }catch(ClassNotFoundException e){ e.printStackTrace(); } try { conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/demo01","root","root"); String sql = "select * from user_info"; stat = conn.prepareStatement(sql); rs=stat.executeQuery(); while(rs.next()){ String id = rs.getString("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String sex = rs.getString("sex"); Table t1 = new Table(id, name, age, sex); list.add(t1); } } catch (SQLException e) { e.printStackTrace(); }finally { try { if(rs!=null){ rs.close(); } if(stat!=null){ stat.close(); } if(conn!=null){ conn.close(); } } catch (SQLException e2) { e2.printStackTrace(); } } return list; } }
頁面(index.jsp):
<%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@page import="demo4.dao.TableDao,demo4.entity.Table"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!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>Show Table</title> </head> <style> .bbody{ margin-left:300px; margin-top:100px } .bbody > table { height:200px; width:400px; } td{ text-align:center; } </style> <body> <div class="bbody"> <table border="1"> <tr > <td>Id</td> <td>Name</td> <td>Age</td> <td>Sex</td> </tr> <% TableDao dao=new TableDao(); List<Table> list =dao.readTable(); for(Table tl:list) {%> <tr> <td><%=tl.getId() %></td> <td><%=tl.getName() %></td> <td><%=tl.getAge() %></td> <td><%=tl.getSex() %></td> </tr> <%} %> </table> </div> </body> </html>
PS:
第一:首先選擇List集合作為返回值,能夠更好的管理這些數據。
第二:DriverManager類,Connection接口,Statement接口,ResultSet接口, 這是JDBC鏈接數據庫需要的類和接口。
其中Statement 和 這次選擇的PreparedStatement 區別:
PreparedStatement用於使用綁定變量重用執行計划,是預編譯的,對於批量處理可以大大提高效率.也叫JDBC存儲過程
使用 Statement 對象。在對數據庫只執行一次性存取的時侯,用 Statement 對象進行處理。PreparedStatement對象的開銷比Statement大,對於一次性操作並不會帶來額外的好處。
第三:Class.forName("XXX.XXX.XXX.XXXXX")的作用是要求JVM查找並加載指定的類,也就是說JVM會執行該類的靜態代碼段
在Class.forName加載完驅動類,開始執行靜態初始化代碼時,會自動新建一個Driver的對象,並調用DriverManager.registerDriver把自己注冊到DriverManager中去。
這是因為在JDBC規范中明確要求這個Driver類必須向DriverManager注冊自己。
第四:這是我自己遇到的一個問題,就是程序運行時,提示java.lang.ClassNotFoundException: com.mysql.jdbc.Driver…… 這個錯誤
原因是在我自己對應的Tomcat中沒有對應的MySQL-connection的jar包,
所以解決辦法也就是:向Tomcat的lib中導入jar包:mysql-connector-java-5.1.43-bin.jar(這個對應這兒自己)
