民工心事 发表于 2023-7-10 17:23:21

Java入门11(JDBC)

JDBC

驱动加载 => 连接创建 => 创建编译 / 预编译语句 => 获取结果集 => 遍历结果集 => 返回结果集
接口Driver驱动Connection连接Statement操作ResultSet结果集
[*]具体的实现不需要由Java的公司自己提供
[*]所有开发者使用JDBC的规范都被统一定义
连接数据库(mysql)

统一资源定位符URL:jdbc:mysql:// + ip地址 + 端口 + 访问的数据库 + 请求参数(配置信息)
mysql驱动类的完整路径:com.mysql.jdbc.Driver
public class DBUtil {
    // 定义用户名
    private static final String USER_NAME = "root";
    // 定义密码
    private static final String PASSWORD = "123456";
    // URL--统一资源定位符
    // jdbc:mysql:// + ip地址 + 端口 + 访问的数据库 + 请求参数(配置信息)
    private static final String URL = "jdbc:mysql://localhost:3306/iWeb?characterEncoding=utf8";

    // 加载驱动(静态代码块)
    static {
      // mysql驱动类的完整路径
      try {
            Class.forName("com.mysql.jdbc.Driver");
      } catch (ClassNotFoundException e) {
            System.out.println("驱动加载失败!");
      }
    }

    // 定义一个获取数据库连接的方法
    public static Connection getConnection(){
      try {
            return DriverManager.getConnection(URL,USER_NAME,PASSWORD);
      } catch (SQLException e) {
            System.out.println("连接获取失败!");
            return null;
      }
    }
}// 连接测试
public static void main(String[] args) {
    // 定义sql语句
    String sql = "insert into student(name) values('robot03')";
    // try-with 代码块,在try后额外提供一个括号,括号里面的资源在try-catch结束后自动释放
    // 只有实现了AutoCloseable接口的类,才支持使用try-with自动关闭

    // 获取数据库连接 + 生成statement编译语句
    try(Connection connection = DBUtil.getConnection();
      Statement statement = connection.createStatement()) {
      // 执行语句
      statement.execute(sql);
    } catch (SQLException e) {
      e.printStackTrace();
    }
}代码封装(DAO)& CRUD

​        DAO层:负责提供JDBC支持,提供对应的DAO接口和实现类
​        ORM(object relation model):对象应用模型,对数据库对象的映射
// 测试表对应的JavaBean
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private long id;
    private String name;
    private String gender;
    private String address;
    private long phone;
}增(insert)

// 增(insert)
public void insert(Student student) {
    // 空值判断
    if(student == null || student.getName() == null || "".equals(student.getName())){
      System.out.println("参数有误!");
      return;
    }
    String sql = "insert into student(NAME,GENDER,ADDRESS,PHONE) values(?,?,?,?)";
    try(Connection connection = DBUtil.getConnection();
      PreparedStatement preparedStatement = connection.prepareStatement(sql)){
      // 添加参数
      preparedStatement.setString(1,student.getName());
      preparedStatement.setString(2,student.getGender());
      preparedStatement.setString(3,student.getAddress());
      preparedStatement.setInt(4,student.getPhone());
      // 执行语句
      preparedStatement.execute();
    }catch(SQLException e){
      e.printStackTrace();
    }
}删(delete)

// 删(delete)public void delete(Student student) {    String sql = "delete from student where 1=1";    if(student == null){      System.out.println("参数有误!");      return;    }    if(student.getId() > 0 && (student.getName() == null || "".equals(student.getName()))){      // 使用 PreparedStatement 进行参数传递,只需要将 sql 中的参数标记为 ? 即可      sql = sql +" and id = ?";      // 使用预编译对象的时候,在创建对象时就需要传入sql      try(Connection connection = DBUtil.getConnection();            PreparedStatement preparedStatement = connection.prepareStatement(sql)){            // 数字代表参数序号            preparedStatement.setInt(1, student.getId());            // 执行sql语句            preparedStatement.execute();      }catch(SQLException e){            e.printStackTrace();      }    } else if (student.getId()
页: [1]
查看完整版本: Java入门11(JDBC)