java连接数据库实现一个简单的登陆界面

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
    }
}


顺利的话到这里就完成了

好的,我可以为您解答关于Java数据库连接的登陆页面问题。 首先,Java数据库连接需要使用JDBC(Java Database Connectivity)技术。JDBC是Java语言中用于执行SQL语句的API,可以通过JDBC连接到各种关系型数据库,如MySQL、Oracle、SQL Server等。 在Java实现登陆页面与数据库连接可以分为以下几个步骤: 1. 加载JDBC驱动程序:在Java连接数据库,需要先加载相应的数据库驱动程序。不同的数据库有不同的驱动程序,例如MySQL的驱动程序为"com.mysql.jdbc.Driver"。可以使用Class.forName()方法来加载相应的驱动程序。 2. 建立数据库连接:在驱动程序加载之后,需要通过DriverManager类中的getConnection()方法来建立数据库连接。getConnection()方法需要传入数据库的URL、用户名和密码等参数。 3. 执行SQL语句:建立好数据库连接之后,可以通过Connection对象的createStatement()方法来创建一个Statement对象,然后使用Statement对象执行SQL语句。 4. 处理查询结果:如果执行的是查询语句,需要使用ResultSet对象来处理查询结果。 下面是一个简单Java代码示例,该代码实现了登陆页面与MySQL数据库的连接: ```java import java.sql.*; public class Login { public static void main(String[] args) { try { // 加载MySQL的JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver"); // 建立数据库连接 String url = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, username, password); // 执行SQL语句 String sql = "SELECT * FROM user WHERE username='admin' AND password='123456'"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); // 处理查询结果 if (rs.next()) { System.out.println("登陆成功!"); } else { System.out.println("用户名或密码错误!"); } // 关闭数据库连接 rs.close(); stmt.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个示例中,我们首先加载了MySQL的JDBC驱动程序,然后建立了与数据库的连接。接着执行了一个查询语句,查询用户名为"admin",密码为"123456"的用户是否存在。最后根据查询结果输出相应的信息。 当然,这只是一个简单的示例,实际中需要根据具体的需求进行修改。同时,需要注意数据库连接的关闭,以免出现连接泄露的问题。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值