如何在jsp上查询并显示数据库mysql的数据表格

需要在jsp上实现查询数据库的表格(就是通过用户输入查询表格)

总体的思路:

1.首先用户在jsp中输入需要查询的对象并跳转Servlet。

2.Servlet在后台接收到数据。

3.Servlet与数据库建立连接,并且在Servlet输入  sql代码与用户输入的信息  去查询Mysql数据库里的表格。

4.在Servlet中接收数据库查询到的信息。

5.再通过跳转跳转到一个新的jsp页面中,并在页面中输出查询出来的表格。

总体上的思路已经写明了,那么接下来我们就按照步骤一步一步往下做。

我们需要的有:

一个用于输入的jsp页面 ,

一个用于建立连接和接收数据的Servlet,

一个用于打印数据的jsp页面

 一.首先写一个用于接收用户数据的表单

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<table>
<form action="FirstSql"> 这里的FirstSql是连接到下面的Servlet的
<input type="text" value="1" name="idcard_w">输入框
<input type="submit" name="Submit">提交表单按钮
</form>
</table>

</body>
</html>FirstSql是连接到下面的Servlet的
<input type="text" value="1" name="idcard_w">输入框
<input type="submit" name="Submit">提交表单按钮
</form>
</table>

</body>
</html>

效果如下

二.创建一个Servlet

   首先这里需要mysql数据库的数据,在Navicat中编写sql代码获取数据表格

SELECT student.`name`,contact_desc.`desc`,contact_ext.contact
FROM student
JOIN contact_ext ON contact_ext.idcard=student.idcard
JOIN contact_desc ON contact_desc.contact_type=contact_ext.contact_type
WHERE student.idcard=;(这里需要查询的ID暂时不写,是需要用户输入的)

查询以后的结果是这样的

然后编写创建Servlet

package com.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/FirstSql")
public class FirstSql extends HttpServlet{
	private static String jdbcDriver = "com.mysql.jdbc.Driver";// mysql连接驱动,无需改
	
	public static String jdbcUrl = "jdbc:mysql://localhost:3306/zdy";
	public static String jdbcUser = "root";//数据库用户名
	public static String jdbcPwd = "1111";//数据库密码
	private static Connection conn;
	public static Statement st;
	
	static {
		try {
			Class.forName(jdbcDriver);// 加载mysql驱动类
			conn = DriverManager.getConnection(jdbcUrl, jdbcUser, jdbcPwd);
			// 驱动利用驱动地址,数据库用户名,密码创建连接
			st = conn.createStatement();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//以上基本是固定格式的
	
	
	
	protected void service(HttpServletRequest request, HttpServletResponse response) //
			throws ServletException, IOException {
		List<Map> list =new ArrayList<Map>();//创建list集合用于存入map的键值对集合
		
		String idcard_w = request.getParameter("idcard_w");//接收到前台传来的数据
		System.out.println(idcard_w);
	
		
		try {
			String sql ="SELECT student.`name`,contact_desc.`desc`,contact_ext.contact\r\n"+
					"FROM student\r\n"+
					"JOIN contact_ext ON contact_ext.idcard=student.idcard\r\n"+
					"JOIN contact_desc ON contact_desc.contact_type=contact_ext.contact_type\r\n"+
					"WHERE student.idcard="+idcard_w;
			//复制之前的sql代码    每行必须要转换为字符串然后加上换行符
			//						idcard_w是用户传入的数据用于查询用户需要的信息
			
			ResultSet rs = st.executeQuery(sql);
			//从数据库读取的内容,返回一个结果集。
			System.out.println("获取数据");
			while (rs.next()) {
				String name = rs.getString("name");
				String desc = rs.getString("desc");
				String contact = rs.getString("contact");
				//获取用循环接收数据库的表格信息
				
				Map map = new HashMap(); 
				map.put("name", name);			
				map.put("desc", desc);		
				map.put("contact", contact);
				//用键值对存入到map集合中
				System.out.println(map);
				list.add(map);//在将map集合对象存入list集合
				System.out.println("放入集合");
				for (Map map_1 :list) {
					System.out.println(map_1);
				}//在打印台遍历出数据查看是否有错误
				
			}//遍历结果集
		} catch (Exception e) {
			e.printStackTrace();
		}
	

		System.out.println("跳转");
		request.setAttribute("key_list",list);//将list集合数据放入到request中共享
		request.getRequestDispatcher("/index.jsp").forward(request, response);
		//跳转到index.jsp页面
	}
}

三.跳转到的index.jsp中,将表格打印出来

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<style>
th, tr, td, table {
	border: 1px solid red;
}
</style>
</head>
<body>
	<table>
		<tr>
			<th>name</th>
			<th>desc</th>
			<th>contact<th>
		</tr>

		<c:forEach items="${key_list}" var="usr" varStatus="idx">
        <tr>
				<td>${usr.name}</td><td>${usr.desc}</td> <td>${usr.contact}</td> 
			</tr>
		</c:forEach>




	</table>

</body>
</html>

到这里程序已经基本完成,剩下就是测试了

在这里输入1提交

页面则会跳转到如下界面

如果提交2的话


 

  • 67
    点赞
  • 453
    收藏
    觉得还不错? 一键收藏
  • 33
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值