回顾反射的三种方式:
1、对象.getClass();
2、类名.class();
3、Class.forName("类的全路径");
//1.验证用户名 2.验证密码 public class Login { static Connection conn ; static { try { //1.加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://master:3306/shujia"; //2.获取连接(通过conn对象操作mysql,conn等同于mysql服务) conn = DriverManager.getConnection(url, "root", "123456"); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { //键盘录入 Scanner sc = new Scanner(System.in); String username = sc.next(); String password = sc.next(); //登录按钮 String login = login(username, password); System.out.println(login); }public static String login(String username,String password) throws Exception{ //3.执行mysql //3.1获取执行器ps //3.2执行sql语句 查(返回结果集rs)和 增删改(成功返回1 失败返回0) String sql="select * from user where username=?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1,username);//参数注入 ResultSet rs = ps.executeQuery();|int i=ps.executeUpdate(); if(!rs.next()){//取反 return "用户不存在"; }else{//向下验证 String passwordmysql = rs.getString("password"); String message = loginPassword(password, passwordmysql); return message; } } public static String loginPassword(String password,String passwordmysql){ if(!password.equals(passwordmysql)){//取反 return "登录失败"; } return "登录成功"; } }
改进代码
//针对于多类用户,每一类用户都需要连接mysql //为避免代码冗余,单独写一个工具类JDBCUtil方便后面写mysql的操作 public class JDBCUtil {//变量名大写 不要改(业内规则) private static String URL; private static String DRIVER; private static String USERNAME; private static String PASSWORD; private static Connection conn; private static PreparedStatement ps=null; private static ResultSet rs=null; static { Properties properties = new Properties(); InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("mysql.properties"); properties.load(is); DRIVER=properties.getProperty("driver"); URL=properties.getProperty("url"); USERNAME=properties.getProperty("username"); PASSWORD=properties.getProperty("password"); Class.forName(DRIVER); conn = DriverManager.getConnection(URL,USERNAME,PASSWORD); } //获取连接(别的类调用JDBCUtil时 可以获取到conn) public static Connection getConn(){ return conn; } //获取执行器的方法 public static PreparedStatement getPs(String sql){ ps=conn.prepareStatement(sql); return ps; } //获取结果集 public static ResultSet getRs(){ rs=ps.executeQuery(); return rs; } //获取update结果 public static int update(){ int i=0; i=ps.executeUpdate(); return i; } //传参给ps(参数个数不固定) //username=root,test,show password=123456,456789,789123 public static void setPs(String ...args) {//可变参数实际是一个数组 for (int i = 0; i < args.length; i++) { ps.setString(i+1,args[i]); } } //关闭 public static void closeAll(){ if(rs!=null){ rs.close(); } if(ps!=null){ rs.close(); } if(conn!=null){ rs.close(); } } }
public class Stu {
public static void main(String[] args) throws Exception{
System.out.println("stu修改");
String test = update("zs", "0");
System.out.println(test);
}
public static String update(String name,String sex) throws Exception{
String sql="update stu set sex=? where name=?";
PreparedStatement ps =JDBCUtil.getPs(sql);
JDBCUtil.setPs(sex,name);
int i = ps.executeUpdate();
if(i!=1){
return "修改失败";
}
return "修改成功";
}
}



