自学内容网 自学内容网

Java(10)MySQL连接

1.什么是JDBC

全称Java Database Connectivity,是Java语言中用于执行SQL语句的API。

它为多种关系数据库提供统一访问接口,允许Java程序连接数据库,执行SQL语句等。

功能特点

  1. 创建管理数据源(数据库中的数据)的连接
  2. 发送SQL命令到数据库中执行
  3. 提取并处理返回的数据集

常用工具

  • DriverManager类,管理数据库的驱动服务
  • Connection接口:创建连接项,建立和数据库传输数据的流
  • Statement接口:执行SQL语言,并返回结果集
  • ResultSet接口:用于接收结果集,通常用于查询操作
  • sqlException类:处理有关数据库操作的异常

 2. 连接数据库

2.1 main方法

package org.example;
import java.sql.*;
public class Test1 {
    public static void main(String[] args) {....}
}

2.2 加载驱动

利用反射方式进行加载,所谓反射就是不用new关键字创建对象

try {
    Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
    System.out.println("驱动类加载失败");
    throw new RuntimeException(e);
}

2.3 准备连接地址

准备连接数据库的数据:IP地址、端口号、用户名密码、库名

在根目录src/main/resources/init.properties下书写基本的数据库信息,如

ip = 127.0.0.1
port = 3306
username = root
password = 888888
dbname = mybatis
dbtype = mysql

而后在 Test1main 方法下建立连接

String url = "jdbc:mysql://127.0.0.1:3306/mybatis";

2.4 创建连接项

Connection conn = null;
try {
    conn= DriverManager.getConnection(url,"root","888888");
} catch (SQLException e) {
    System.out.println("创建连接项失败");
}
System.out.println(conn);

2.5 对数据库操作

String sql = "select * from user ";
try {
    //预编译对象
    PreparedStatement ps = conn.prepareStatement(sql);
    //执行查询sql
    ResultSet rs = ps.executeQuery();
    //获取结果集对象中的值
    while (rs.next()) {
        System.out.println(rs.getInt("id") + rs.getString("username"));
    }
} catch (SQLException e) {
    throw new RuntimeException(e);
}

 SQL语句条件:

  1. 使用变量拼接的方式(不推荐,存在SQL注入风险)
  2. 使用占位符的方式

何为SQL注入:

如果 selectUsername 或 selectSex 来自用户输入,恶意用户可以注入 SQL 代码,导致安全问题。例如,如果用户输入OR 1=1 --,SQL语句将变为:

SELECT * FROM user WHERE username = '' OR 1=1 --' AND sex = 2

String selectUsername = "张三";
int selectSex = 2;
String sql = "select * from user where username = ? and sex = ? ";
try {
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(1,"张三");
    ps.setInt(2,2);
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
        System.out.println(rs.getInt("id") + rs.getString("username"));
    }
} catch (SQLException e) {
    throw new RuntimeException(e);
}

3.封装测试 

与标题2的区别是,下段代码将查询结果封装成User对象的列表。

3.1 User 类

它是一个典型的Java实体类,用于封装用户的基本信息。

并提供了标准的getter和setter方法,以及一个toString方法用于返回对象的字符串表示。

这样的类在Java应用中非常常见,尤其是在与数据库交互时,用于映射数据库表中的记录。

文件地址:org/example/pojo/User.java

package org.example.pojo;
import java.util.Date;
public class User {
    private Integer id;
    private String username;
    private Date birthday;
    private Integer sex;
    private String address;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public Integer getSex() {
        return sex;
    }
    public void setSex(Integer sex) {
        this.sex = sex;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex=" + sex +
                ", address='" + address + '\'' +
                '}';
    }
}

3.2 测试函数 

package org.example;
import org.example.pojo.User;
import java.sql.*;
import java.util.ArrayList;
public class Test1 {
    public static void main(String[] args) {
        // 1. 加载MySQL驱动
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("驱动类加载失败");
            throw new RuntimeException(e);
        }
        // 2. 准备连接数据库的数据
        String url = "jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
        String user = "root";
        String password = "888888";
        // 3. 创建连接
        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            // 4. 对数据库操作
            String selectUsername = "张三";
            int selectSex = 2;
            String sql = "SELECT * FROM user WHERE username = ? AND sex = ?";
            // 预编译对象
            try (PreparedStatement ps = conn.prepareStatement(sql)) {
                ps.setString(1, selectUsername);
                ps.setInt(2, selectSex);
                // 执行查询
                try (ResultSet rs = ps.executeQuery()) {
                    // 获取结果集对象中的值
                    ArrayList<User> userList = new ArrayList<>();
                    while (rs.next()) {
                        User u = new User();
                        u.setId(rs.getInt("id"));
                        u.setUsername(rs.getString("username"));
                        u.setBirthday(rs.getDate("birthday"));
                        u.setSex(rs.getInt("sex"));
                        u.setAddress(rs.getString("address"));
                        userList.add(u);
                    }
                    // 输出用户列表
                    for (User u : userList) {
                        System.out.println(u);
                    }
                }
            }
        } catch (SQLException e) {
            System.out.println("数据库操作失败");
            throw new RuntimeException(e);
        }
    }
}


原文地址:https://blog.csdn.net/Tttian622/article/details/145200637

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!