import java.sql.*;
import java.util.*;
public class JDBCTest06 {
public static void main(String[] args) {
Map<String,String> userLoginInfo=initUI();
boolean loginSuccess= Login(userLoginInfo);
System.out.println(loginSuccess?"登录成功":"登录失败");
}
/**
* 用户登录
* @param userLoginInfo 用户登录信息
* @return false失败 true成功
*/
private static boolean Login(Map<String, String> userLoginInfo) {
boolean loginSuccess=false;
Connection conn=null;
PreparedStatement ps=null;//用java.sql.PreparedStatement 属于预编译的数据库对象
ResultSet rs=null;
ResourceBundle bundle=ResourceBundle.getBundle("jdbc");
String driver=bundle.getString("driver");
String url=bundle.getString("url");
String user=bundle.getString("user");
String password=bundle.getString("password");
try {//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
conn= DriverManager.getConnection(url,user,password);
//3.获取预编译的数据库对象
//其中一个?表示一个占位符,一个?将来接收一个值,占位符不能用单引号括起来
String sql="select* from t_user where loginName=?"+"and loginPwd=?";
//程序执行到此处发送sql给DBMS,然后进行sql预编译;
ps=conn.prepareStatement(sql);
//给占位符传值,第一个问号下标是1,第二个问号下标是2;
ps.setString(1,userLoginInfo.get("loginName"));
ps.setString(2,userLoginInfo.get("loginPwd"));
//执行sql
rs=ps.executeQuery();
//处理结果集
if(rs.next()){
loginSuccess=true;
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}finally {
//释放资源
if(rs!=null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
return loginSuccess;
}
private static Map<String, String> initUI() {
Scanner s=new Scanner(System.in);
System.out.print("用户名:");
String loginName=s.nextLine();
System.out.print("密码:");
String loginPwd=s.nextLine();
Map<String,String> userLoginfo=new HashMap<>();
userLoginfo.put("loginName",loginName);
userLoginfo.put("loginPwd",loginPwd);
return userLoginfo;
}
}
解决sql注入
最新推荐文章于 2022-12-02 16:17:07 发布