javaweb+struct1.2+mysql实现将数据库中查询得到的list显示到前台

24 篇文章 0 订阅

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"%>即可解决警告问题。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值