4.11-4.12学习总结

JDBC

4.11-4.12学习总结_第1张图片

4.11-4.12学习总结_第2张图片

import java.sql.Statement;

public class JDBC extends Exception{
    public void startJDBC() throws Exception{
        //Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql:///shu";
        String username = "root";
        String password = "123456";
        Connection conn = DriverManager.getConnection(url,username,password);

        String sql = "select *from login";

        Statement user = conn.createStatement();

    }
}

 4.11-4.12学习总结_第3张图片

4.11-4.12学习总结_第4张图片

package data;

import java.sql.*;

public class JDBC extends Exception{
    public static void main(String[] args) throws Exception{


        //Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql:///shu";
        String username = "root";
        String password = "126";
        Connection conn = DriverManager.getConnection(url,username,password);



        String sql = "SELECT * FROM login";
        PreparedStatement stm = conn.prepareStatement(sql);

        ResultSet rs = stm.executeQuery(sql);

        while(rs.next())
        {
            int id = rs.getInt("id");
            String user = rs.getString("username");
            String phone = rs.getString("phone_number");
            String user_password = rs.getString("password");
            System.out.println("-----------------------");
            System.out.println(id);
            System.out.println(user);
            System.out.println(phone);
            System.out.println(user_password);
        }
        rs.close();
        stm.close();
        conn.close();

    }

}

将ResultSet封装到集合当中 

package data;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class JDBC extends Exception{
    public static void main(String[] args) throws Exception{


        //Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql:///shu";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url,username,password);



        String sql = "SELECT * FROM login";
        PreparedStatement stm = conn.prepareStatement(sql);

        ResultSet rs = stm.executeQuery(sql);

        List list = new ArrayList<>();
        while(rs.next())
        {
            LoginAccount account = new LoginAccount();
            int id = rs.getInt("id");
            String user = rs.getString("username");
            String phone = rs.getString("phone_number");
            String user_password = rs.getString("password");

          account.setId(id);
          account.setUsername(user);
          account.setPhone(phone);
          account.setPassword(password);


          list.add(account);
        }

        System.out.println(list);

        rs.close();
        stm.close();
        conn.close();

    }

}
package data;

public class LoginAccount {
    private int id;
    private String username;
    private String phone;
    private String password;



    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "LoginAccount{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", phone='" + phone + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

Connection(数据库连接对象)作用:

1.获取执行SQL 的对象
2.管理事务 

4.11-4.12学习总结_第5张图片

 4.11-4.12学习总结_第6张图片

4.11-4.12学习总结_第7张图片

4.11-4.12学习总结_第8张图片

为什么需要防止 sql 注入:

  • sql注入是一种常见的网络攻击方式,攻击者通过向应用程序中的输入框或其他交互式元素注入非法的SQL语句来实现数据窃取、篡改、删除或添加等操作,从而造成安全漏洞。
  • 通过预先过滤和转义用户输入的数据,应用程序可以避免应对潜在的SQL注入攻击带来的风险。

举个例子:

就比如我们写了一个登录页面,如果没有使用sql注入,在一些特定的情况下,依旧可以登录成功。

就比如随便给一个  sql 里面不存在的用户,如果登录密码为  “1 or 1=1 ”恒等式,这样就会导致非法登录,就会导致数据库的不安全。

package data;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class JDBC extends Exception{
    public static void main(String[] args) throws Exception{


        //Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql:///shu&useServerPrepStmts=true";
        String username = "root";
        String password = "3456";
        Connection conn = DriverManager.getConnection(url,username,password);

        String user_name = "蔷薇";
        String pwd = "32342";

        String sql = "select * from login where user_name = ? and password = ?";


        PreparedStatement pstm = conn.prepareStatement(sql);

        pstm.setString(1,user_name);
        pstm.setString(2,pwd);

        ResultSet rs = pstm.executeQuery();

        if(rs.next())
        {
            System.out.println("登陆成功");
        }
        else
        {
            System.out.println("登陆失败");
        }



        rs.close();
        pstm.close();
        conn.close();

    }

}

 4.11-4.12学习总结_第9张图片

4.11-4.12学习总结_第10张图片

 4.11-4.12学习总结_第11张图片


作业错题:

4.11-4.12学习总结_第12张图片

4.11-4.12学习总结_第13张图片

答案:false  true  true 

分析:

  1. 首先Set集合最大的特点就是不会有重复元素,所以在添加元素的时候会通过Person类的 hashcode() 方法和 equals() 方法来确定是否有相同的元素。
  2. 上面的 p1 和 p2 很明显是两个不同的对象,所以他们都可以添加成功,并且有了对应的哈希值;
  3. 将p1的内容进行修改,导致 p1 的哈希值也发生改变,但是 p1 的位置不发生改变(p1的位置由原来的修改前的 p1 决定)所以导致使用 Set集合的 remove 方法使用的是修改后的哈希值,修改后的哈希值在 table 数组上的元素为空,无法删除 , 返回 false;
  4. 新增的语句1 虽然与修改后的 p1 相同,得到的哈希值也一样,但是 p1的位置由原来的修改前的 p1 决定 ,新增的语句不会和这个发生冲突,所以可以添加成功,返回 true;
  5. 新增的语句2的得到的哈希值虽然和原来的修改前的 p1 得到的哈希值一样,但是两个他们的内容不一样,所以依旧可以添加成功,返回 true;
package data;

import java.util.HashSet;
import java.util.Objects;

public class homework1 {
    public static void main(String[] args) {
        HashSet set = new HashSet();
        Person p1 = new Person(1,"金");
        Person p2 = new Person(2,"刚");
        set.add(p1);

        set.add(p2);
        System.out.println(set);
        System.out.println(p1.hashCode());
        p1.setName("功");
        System.out.println(p1.hashCode());
        System.out.println(set);
        System.out.println(set.remove(p1));
        System.out.println(set.add(new Person(1,"功")));
        System.out.println(set);
        System.out.println(set.add(new Person(1,"金")));
        System.out.println(set);
    }
}

class Person{
    private int id;
    private String name;

    public Person(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return id == person.id && name.equals(person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name);
    }
}

4.11-4.12学习总结_第14张图片

你可能感兴趣的:(学习)