1.action中编写数据库的连接查询语句:
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "com.mysql.jdbc.Driver";
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/test";
// MySQL数据库的连接用户名
public static final String DBUSER = "root";
// MySQL数据库的连接密码
public static final String DBPASS = "123456";
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws SQLException, Exception {
Connection conn = null; // 数据库连接
Statement stmt = null;
ResultSet rs = null; // 保存查询结果
try {
Class.forName(DBDRIVER); // 加载驱动程序
conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
} catch (ClassNotFoundException e) {
System.out.println("找不到驱动器");
} catch (SQLException e) {
System.out.println("连接数据库失败");
}
String sql = "SELECT id,proName,result,time from testresult";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (rs.next()) {
System.out.println("rs has data");
} else {
System.out.println("rs has NO data");
}
其中要注意driver的路径一定要写对。
接下来是将查询得到的数据rs保存到list中。
1.首先建一个javabean封装类,用来设置sql查询出来的变量属性:
public class TestResult {
private int id;
private String proName;
private String result;
private String time;
public int getId() {
return this.id;
}
public String getProName() {
return this.proName;
}
public String getresult() {
return this.result;
}
public String getTime() {
return this.time;
}
public void setId(int id) {
this.id = id;
}
public void setProName(String proName) {
this.proName = proName;
}
public void setResult(String result) {
this.result = result;
}
public void setTime(String time) {
this.time = time;
}
}
然后在action中编写程序如下:
List<TestResult> list = new ArrayList<TestResult>();
TestResult tsrl = new TestResult();
//这样写是有问题的,此处体现出来java与c++的不同,把对象写在循环外边,会导致查询保存的记录都是一样的了,没查询一次,就会腹泻trsl,因为在java中tsrl对象在用的时候,都是引用的地址,你在循环中对其修改一次,就把源地址中的存放的数据修改一次,这样就导致了,结果出来都是相同的数据,并且都是最后一条的数据。这一点跟c++是有很大不同的。解决办法:是在循环中new 对象,而不是在循环外编写。
rs.beforeFirst();//不管前面是否用到了rs.next()。此处都把指针指向开始的位置。while (rs.next()) {String ids = String.valueOf(rs.getInt(1));tsrl.setId(ids);tsrl.setProName(rs.getString(2));tsrl.setResult(rs.getString(3));tsrl.setTime(rs.getString(4));String id=tsrl.getId();String name=tsrl.getProName();list.add(tsrl);}conn.close(); // 数据库关闭int num = list.size();request.setAttribute("list", list);// 保存用户列表return (mapping.findForward("success"));
这样就把list对象传递到前台中去了。在前台中利用JSTL获取得到的list对象,如下:<table width="80%" border="1" cellpadding="0" style="border-collapse: collapse; " bordercolor="#000000"> <tr> <td><b>ID</b></td> <td><b>程序名</b></td> <td><b>运行状态</b></td> <td><b>监控时间</b></td> </tr> <c:forEach items="${list}" var="list"> <tr> <td>${list.id}</td> <td>${list.proName}</td> <td>${list.result}</td> <td>${list.time}</td> </tr> </c:forEach> </table>
当出现警告说: Unknown tag (c:forEach).多半是因为没有加入JSTL必须的两个包,一般用myeclipse+struct不用考虑这个问题,因为包都包含了,但是还需要在jsp页面,声明一下:在jsp的最前面编写:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>即可解决警告问题。