Java实现登录[数据库]

和上篇的随机点名系统一样,都是使用MySQL数据库来实现,因为刚学所以写点简单例子满足下自己;

需求分析:

1、输入用户名和密码

2、与数据库中的记录进行比较

原理比较 简单,直接贴代码吧。

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

import com.hym.utils.CloseUtils;
import com.hym.utils.DBUtils;

public class LoginTest {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入用户名: ");
		String username = sc.next();
		System.out.print("请输入登录密码: ");
		String password = sc.next();
		
		int result = login(username,password);
		//返回的result为1时表示登录成功;
		if(result==1){
			System.out.println("Login Successfully~");
		}else if(result==0){
			//此时帐号是存在的
			System.out.println("密码错误...");
		}else{
			System.out.println("帐号不存在...");
		}
	}

	private static int login(String username, String password) {
		Connection conn = null;
		Statement sta = null;
		ResultSet rs = null;
		try {
			//加载驱动并创建连接对象
			conn = DBUtils.getConnection();
			//创建执行对象
			sta = conn.createStatement();
			//执行匹配语句
			rs = sta.executeQuery("select name,password from login");
			while(rs.next()){
				//得到每次记录中的name值和password值,用来比较
				String name = rs.getString("name");
				String pw = rs.getString("password");
				//当帐号和密码都匹配时,返回1;
				if(username.equals(name)&&password.equals(pw)){
					return 1;
				//只有帐号匹配时,返回0,表示帐号存在;
				}else if(username.equals(name)){
					return 0;
				}
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			//关闭顺序按从小到大;
			CloseUtils.closeAll(rs,sta,conn);
		}
        //都不存在,返回-1
		return -1;
	}
}

        这是在MySQL中存储的用户名与密码;     下列为运行结果:


改进:上述例子虽然实现了功能,但是当数据库中数据量庞大的时候,执行效率很低;下面对上述代码进行改进,使用预处理的执行对象;增加了安全性也提高了执行性能;

public class LoginTwoTest {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入用户名: ");
		String username = sc.next();
		System.out.print("请输入登录密码: ");
		String password = sc.next();
		boolean result = login(username,password);
		if(result){
			System.out.println("Login Successfully~");
		}else{
			System.out.println("Login Defealted..");
		}
	}

	private static boolean login(String username, String password) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			//加载驱动并创建连接对象
			conn = DBUtils.getConnection();
			//创建预处理执行对象,执行语句获取第一栏
			String sql = "select count(1) from login where name=? and password=?";
			ps = conn.prepareStatement(sql);
			//将指定参数设置为给定 Java String 值,将此值发送给数据库
			ps.setString(1, username);
			ps.setString(2, password);
			rs = ps.executeQuery();
			if(rs.next()){
				//如果第一栏中有元素id则肯定大于0,返回的则为true说明匹配上了;
				int result = rs.getInt(1);
				return result>0;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			//关闭顺序按从小到大;
			CloseUtils.closeAll(rs,ps,conn);
		}
		return false;
	}
}

后续更新实现注册功能;

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值