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