JDBC登录与数据传输

JDBC登录与数据传输

现在我们就先对登录代码来操作解释一波~(当然也不会讲的太具体 实在不行百度也是不错的选择)

那么在写代码之前先创建好代码中所需要的包(包名如下)

controller(控制器)
Filter(过滤器)
mapper(连接数据库代码的接口)
mapperImpl(连接数据库的代码)
service(服务:对前后端数据进行比对)
serviceImpl(服务的接口)
pojo(数据)

创建完包之后就跟着下面的步骤一步步执行就可以了

在pojo包中创建User类 并生成Get/Set/toString() 方法就可以了(代码很简单,这里就展示部分代码 )

private int id ;
	private String uname ;
	private String aname ;
	private int tel ;
	private String email ;
	private Date date ;
	private String role ;
	private String upass ;

在mapper包中创建一个用于连接数据库的接口类(UserMapper)

public interface UserMapper {
	
	User getUser(User user);//返回User对象
	List<User> getList();//返回包含User的List集合
}

写完接口那么就来实现它(UserMapperImpl)

public class UserMapperImpl implements UserMapper {

	@Override
	public User getUser(User user) {
		User user1 = null;//声明User对象
		Connection conn = null;//不写在try/catch中是为了方便下面的关流(数据库连接池默认:100)
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");//这里通过反射 加载Mysql的驱动类
            //创建数据库的连接(写到这为了检测数据库是否连接成功 可以输出一下conn 如果有结果则连接成功)
			conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java", "root", "abc123");
            //sql语句
			ps = conn.prepareStatement("select uname,upass from test where uname = ? and upass = ? ");
            //这里的setString()指的是sql语句中的?(问号) 从1开始
			ps.setString(1, user.getUname());
			ps.setString(2, user.getUpass());
            //执行sql语句并返回)ResultSet(结果集)对象
			rs = ps.executeQuery();
			while (rs.next()) {//根据是否有值来判断
				user1 = new User();
				user1.setUname(rs.getString("uname"));//通过一开始创建的set来进行赋值
				user1.setUpass(rs.getString("upass"));
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
            //下面就是关闭接口(与栈一样先进后出)
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		return user1;
	}
	@Override
	public List<User> getList() {
		// TODO Auto-generated method stub
		List<User> user1 = new ArrayList<User>();//由于要返回一整个数据所有需要一个集合
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java", "root", "abc123");
			ps = conn.prepareStatement("select * from test  ");//查询表中所有
			rs = ps.executeQuery();
			while (rs.next()) {
                //和上面代码雷同
				User user = new User();
				user.setId(rs.getInt("id"));
				user.setUname(rs.getString("uname"));
				user.setAname(rs.getString("aname"));
				user.setTel(rs.getInt("tel"));
				user.setEmail(rs.getString("email"));
				user.setDate(rs.getDate("date"));
				user.setRole(rs.getString("role"));
				user.setUpass(rs.getString("upass"));
				user1.add(user);//将赋好值得user对象加到集合中
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (ps != null) {
				try {
					ps.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		return user1;
	}

}

由于在连接数据库的操作已经在代码中解释了 所以下面我们依旧是跟着代码流程写下去

在service包中创建UserService的接口类

public interface UserService {
	boolean checkUser(User user);//对形参里的user进行判定返回布尔值
	List<User> getUsers();//获取list集合
}

在serviceImpl包中创建UserServiceImpl的实现类

public class UserServiceImpl implements UserService{
	private UserMapper uMapper = new UserMapperImpl();//通过多态实现UserMapperImpl的对象
	@Override
	public boolean checkUser(User user) {
		// TODO Auto-generated method stub
		boolean flag = false ;
		User user2 = uMapper.getUser(user);//获取数据库查询结果
		if (user2 != null) {//查询成功不就不会空值对呗~
			flag = true ;
		}
		return flag;//将布尔值返回
	}
	@Override
	public List<User> getUsers() {
		return uMapper.getList();//这还是返回集合
	}

}

目前连接数据库的代码也完成了,检测是否成功的代码也完成了 那么现在就只剩下获取前端数据的controller了

在controller包中创建UserController类(这里我们前端采用post提交)

@WebServlet("/login")//这里采用了注解的方式来声明(也就不需要去web.xml中进行配置啦~ )
public class UserController extends HttpServlet {
	private UserService uSimple = new UserServiceImpl();//通过多台获取UserServiceImpl对象

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String uname = req.getParameter("uname");//通过getParameter()方法来获取前端数据的数据
		String upass = req.getParameter("upass");
		User user = new User();
		user.setUname(uname);
		user.setUpass(upass);
		boolean result = uSimple.checkUser(user);//将前端的值进行判定返回布尔值
		
		if (result) {//成功则执行下面代码
            //通过Session来进行短时间(30min)的用户名传输
			HttpSession session = req.getSession();
			session.setAttribute("uname", uname);//key和value
            //这里我个人是通过ServletContext全局的方式来获取数据库传输的集合
			ServletContext context = this.getServletContext();
			List<User> users = uSimple.getUsers();
			context.setAttribute("lists", users);
			req.getRequestDispatcher("/index.jsp").forward(req, resp);//跳转
		} else {
			req.setAttribute("temp", "用户名或密码错误");
			req.getRequestDispatcher("/login.jsp").forward(req, resp);//跳转
		}

	}
}

到现在 JDBC登录与数据传输后台代码已经完成了,当然你们也可以接着去优化这里的代码

那么前端的代码我就不全部显示出来了(显示集合显示的代码)

<div id="data">
				<table id="datalist" border="1" cellspacing="0px" width="700px">
		<tr align="center">
			<td>管理员id</td>
			<td>姓名</td>
			<td>登录名</td>
			<td>电话</td>
			<td>电子邮件</td>
			<td>授权日期</td>
			<td>拥有角色</td>
			<td>密码</td>
		</tr>
		<c:forEach items="${lists}" var="list" >
			<tr align="center">
				<td>${list.id}</td>
				<td>${list.uname}</td>
				<td>${list.aname}</td>
				<td>${list.tel}</td>
				<td>${list.email}</td>
				<td>${list.date}</td>
				<td>${list.role}</td>
				<td>${list.upass}</td>
			</tr>
		</c:forEach>
	</table>

			</div>

这里主要是使用jstl标签库 使用之前需要在最上方加入一下代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


在文章最后我会将代码中所需要的插件链接与代码成功Gif展出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将数据库中的数据传输到页面,可以使用JDBC连接数据库并执行查询操作,然后将查询结果封装到JavaBean对象中,最后将JavaBean对象传递给JSP页面进行展示。 以下是一个简单的例子: 1. 首先需要在JSP页面中引入JavaBean对象: ```jsp <jsp:useBean id="list" class="com.example.ListBean" scope="page"/> ``` 2. 在JavaBean中定义属性和方法来获取数据库中的数据: ```java public class ListBean { private List<String> dataList; public List<String> getDataList() { // 连接数据库,执行查询操作,将结果存储到dataList中 // ... return dataList; } } ``` 3. 在JSP页面中使用JSTL标签库来遍历JavaBean对象中的数据并展示在页面上: ```jsp <c:forEach items="${list.dataList}" var="item"> <li>${item}</li> </c:forEach> ``` 注意,上述代码需要使用JSTL标签库,需要在JSP页面中引入以下代码: ```jsp <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ``` 最后,为了连接数据库,你需要在Java代码中使用JDBC API来编写代码。这里提供一个简单的代码示例: ```java String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "password"; try (Connection con = DriverManager.getConnection(url, user, password); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable")) { List<String> dataList = new ArrayList<>(); while (rs.next()) { String data = rs.getString("column_name"); dataList.add(data); } // 将查询结果存储到JavaBean对象中 ListBean list = new ListBean(); list.setDataList(dataList); // 将JavaBean对象传递给JSP页面进行展示 request.setAttribute("list", list); request.getRequestDispatcher("list.jsp").forward(request, response); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值