和上篇的随机点名系统一样,都是使用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);}//都不存在,返回-1return -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;}
}
后续更新实现注册功能;