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();
}
}
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.管理事务
为什么需要防止 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();
}
}
作业错题:
答案:false true true
分析:
- 首先Set集合最大的特点就是不会有重复元素,所以在添加元素的时候会通过Person类的 hashcode() 方法和 equals() 方法来确定是否有相同的元素。
- 上面的 p1 和 p2 很明显是两个不同的对象,所以他们都可以添加成功,并且有了对应的哈希值;
- 将p1的内容进行修改,导致 p1 的哈希值也发生改变,但是 p1 的位置不发生改变(p1的位置由原来的修改前的 p1 决定)所以导致使用 Set集合的 remove 方法使用的是修改后的哈希值,修改后的哈希值在 table 数组上的元素为空,无法删除 , 返回 false;
- 新增的语句1 虽然与修改后的 p1 相同,得到的哈希值也一样,但是 p1的位置由原来的修改前的 p1 决定 ,新增的语句不会和这个发生冲突,所以可以添加成功,返回 true;
- 新增的语句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);
}
}