文章目录
java连接数据库实现一个简单的登陆界面
刚开始学习java,学习了一阵子老师要求做一个登陆界面,由于刚开始学习所以也是做了两三天,各种查阅资料才终于完成。作为纪念也是一个以后的参考,决定记录一下过程。其中借鉴学习了很多别人的代码,只是一个记录哈。
效果展示
在浏览器中打开,输入用户名和密码后登陆
如果数据库中有该数据则登陆成功,否则登陆失败
输入错误的密码或者数据库中不存在该用户则登陆失败
使用到的工具
- idea(专业版)
- java
- tomcat
- mysql(navicat可视化工具)
配置环境
- java开发环境
- 数据库配置
- tomcat配置
这个网上教程还是挺多的,跟着一步一步来就可以了,设置变量这些不是很难
创建一个数据库
我这里创建了一个叫jdbc的数据库,建了一张表users,包含id和用户名密码,并且插入了一些数据
这是插入数据的代码
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class testInsert {
public static void main(String[] args) throws SQLException {
Connection conn = null;
Statement st = null;
Connection rs = null;
try {
conn = jdbcUtils.getConn();
st = conn.createStatement();
for (int i = 1 ;i<999;i++){
String id = String.valueOf(i);
String sql = String.format("UPDATE users SET name='%s' WHERE id=%d","user"+id,i);
st.executeUpdate(sql);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
finally {
jdbcUtils.release(conn,st,null);
}
}
}
在idea中连接数据库
在idea中加载数据库驱动
项目中创建一个新的文件夹lib,把mysql-connector-java-8.0.26.jar数据库驱动复制到lib文件夹下,把lib加载到库中
测试一下
这里没错的话可以输出数据库中的数据了(学习的狂神的mysql教程)
public class test1 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.用户信息和url
String url = "jdbc:mysql://localhost:3306/jdbcStudy
useUnicode=true&characterEncoding=utf8";
String username = "root";
String password = "12345678";
//3.连接数据库connection对象
Connection connection = DriverManager.getConnection(url, username, password);
//4.执行sql对象statement
Statement statement = connection.createStatement();
//5.去执行sql
String sql = "SELECT * FROM `users`";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println("id=" + resultSet.getObject("id"));
System.out.println("name=" + resultSet.getObject("name"));
System.out.println("password=" + resultSet.getObject("password"));
System.out.println("----------------------------------------");
}
// 6.释放链接
resultSet.close();
statement.close();
connection.close();
}
}
创建一个web项目
还要去配置一下classes文件夹和lib文件夹,网上也有教程的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rlwln5DK-1627461343989)(/Users/yi/Library/Application Support/typora-user-images/image-20210728145145233.png)]
前端页面
index 这里是抄的别人的,还没学jsp搞不定从服务器获取数据那部分
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<form class="login" action="loginservlet" method="post">
<p class="title">登陆页面</p>
<input type="text" placeholder="username" autofocus name="username" /><br>
<i class="fa fa-user"></i>
<input type="password" placeholder="123" name="password" /> <i class="fa fa-key"></i><br>
<button type="submit">
<i class="spinner"></i> <span class="state">登陆</span>
</button>
</form>
</body>
</html>
成功页面显示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>成了!</h1>
</body>
</html>
失败页面显示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>不行</h1>
</body>
</html>
部署tomcat服务器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wXdnLteW-1627461343990)(/Users/yi/Library/Application Support/typora-user-images/image-20210728145253678.png)]
我在启动tomcat服务器时出现的错误
27-Jul-2021 14:44:43.583 严重 [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[org.apache.coyote.http11.Http11Protocol-8080]]
org.apache.catalina.LifecycleException: 协议处理程序初始化失败
端口被占用了,打开终端输入 lsof -i tcp:8080 查看端口号被什么进程占用,然后用kill -9 进程号 杀掉进程就好了
后端处理数据
从服务器接收到数据以后,需要处理数据是否和数据库匹配
loginservlet类
处理传回来的数据的类
package Servlet;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import Utils.sqlD;
import com.sun.org.slf4j.internal.Logger;
import com.sun.org.slf4j.internal.LoggerFactory;
import com.sun.tools.javac.util.Log;
/**
* Servlet implementation class loginservlet
*/
@WebServlet("/loginservlet")
public class loginservlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public loginservlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* request请求
* response响应
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("数据传过来了");
String username = request.getParameter("username");//获取表单中name="username"
String userpassword = request.getParameter("password");//获取表单中nam="password"的数据
System.out.println(username + "," + userpassword);//测试是否能够传到这里
//验证表单数据是否与数据库数据相匹配
sqlD util = new sqlD(); //jdbc连接数据库的类
try {
if (util.login(username, userpassword) == 1) { //在sqlD类中的login方法,如果返回值为1,if语句为true
System.out.println("登录成功!");
response.sendRedirect("HelloWorld.html"); //跳转到登录成功的页面
/*第二种跳转方式,并且能够传参
* request.setAttribute("username", username);
* request.getRequestDispatcher("suce.jsp").forward(request, response);
*/
}else { //如果if语句为false,跳转会登录界面或者跳转到失败界面
System.out.println("登录失败!");
response.sendRedirect("NewFile.html");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
sqID类
和数据库连接的类
package Utils;
/**
* 数据库工具类
* @author Administrator
*
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.liu.utils.jdbcUtils;
public class sqlD {
public static Connection getConnection(){ //连接数据库的方法
//与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
Connection conn=null;
//连接的IP加端口号 //数据库名 //跳过安全认证
String ip="jdbc:mysql://localhost:3306/oli?useSSL=false";
String username="root"; //数据库用户名
String password="123456";//数据库用户密码
try { //返回与带有给定字符串名的类或接口相关联的 Class 对象。
Class.forName("com.mysql.jdbc.Driver");//指向jdbc包下的"com.mysql.jdbc.Driver"类
//管理一组 JDBC 驱动程序的基本服务。 //试图建立到给定数据库 URL 的连接。
conn=DriverManager.getConnection(ip,username,password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public int login(String username,String userpassword) throws SQLException { //将doPost()传来的值和数据库用户密码表的数据相比较
Connection conn = null;
conn = getConnection();//与特定数据库的连接(会话)。在连接上下文中执行 SQL 语句并返回结果。
if (conn != null) {
Statement stat = null;
ResultSet rs = null;//表示数据库结果集的数据表,
try {
stat = conn.createStatement(); //创建一个 Statement 对象来将 SQL 语句发送到数据库。
//数据库条件查询语句
String sql = String.format("SELECT * FROM `users` WHERE `NAME` = '%s' AND `PASSWORD` = '%s'",username,userpassword);
rs = stat.executeQuery(sql);//executeQuery()执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
if (rs.next()) { //有返回结果集为true,帐号密码正确
return 1;//方法返回1
}else {
return 0;//方法返回0
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return 0; //方法返回0
}
}
顺利的话到这里就完成了