JavaEE-JDBC

196 阅读3分钟

一、JDBC介绍

1. 图解

2. 描述

1). 概念

Java DataBase Connectivity Java数据库连接,Java语言操作数据库

2). 本质

官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各数据库厂商去实现这套接口,提供数据库驱动jar包。我们使用这套接口(JDBC)编程,根据多态性质,真正执行的代码是驱动jar包中的实现类

Interface Person

Person person = new Worker();
//执行的是Worker类中的eat方法
person.eat();

3. 代码实现

package cn.javaee.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class javaee_jdbc {
    public static void main(String[] args) throws Exception {
        //0. 需root登陆数据库,将数据库时区改为中国(+8:00)时区,set global time_zone ='+8:00';

        //1. 导入数据库驱动jar包 mysql-connector-java-8.0.21.jar

        //2. 注册驱动,该版本的驱动存在路径更新为com.mysql.cj.jdbc.Driver,
        Class.forName("com.mysql.cj.jdbc.Driver");

        //3. 获取数据库连接对象
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase","huoshan","huoshan");

        //4. 定义sql语句
        String sql = "update mytable set sex = 'famale' where id = 2";

        //5. 获取 可执行sql语句 的对象
        Statement statement = connection.createStatement();

        //6. 执行sql语句,并返回执行结果
        int count = statement.executeUpdate(sql);

        //7. 处理结果
        System.out.println(count);

        //8. 释放资源
        statement.close();
        connection.close();
    }
}


4. 代码详解

1). DriverManager 驱动管理对象

  • 功能:
      1. 注册驱动:告诉程序应该使用哪一个数据库驱动jar包

        static void registerDriver(Driver driver):注册给定的驱动程序DriverManager

        代码使用: Class.forName("com.mysql.cj.jdbc.Driver"); 查看源码发现,com.mysql.ct.jdbc.Driver类加载时会自动加载静态代码块

        static { try { java.sql.DriverManager.registerDriver(new Driver()); }catch(SQLException E){ throw new RuntimeException("Can't register driver!"); } }

        注意:mysql5之后的驱动jar包可以省略代码注册驱动的步骤

      1. 获取数据库连接
      • 方法:static Connection getConnection(String url,String user,String password)

      • 参数:

        • url: 指定连接的路径

          • 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
          • 例子: jdbc:mysql://localhost:3306/mydatabase
          • 细节: 如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可简写为:jdbc:mysql:///mydatabase
        • user: 用户名

        • password: 密码

2). Connection: 数据库连接对象

  • 功能:

    • 获取可执行sql的对象

      • Statement createStatement()
      • PreparedStatement prepareStatement(String sql)
    • 管理事务

      • 开启事务:

        void setAutoCommit(boolean autoCommit):调用该方法设置参数为false,则开启事务

      • 提交事务:

        commit()

      • 回滚事务:

        rollback()

3). Statement: 执行静态sql语句的对象

  • 执行sql

    • boolean execute(String sql):可以执行任意的sql

    • int executeUpdate(String sql):执行DML(数据库操作语句insert、update、delete)语句(常用)、DDL(数据库定义语句create、alter、drop)语句

      • 返回值:影响的行数,可以通过返回值判断DML语句是否执行成功,>0,(执行DDL返回值会=0) 则执行成功,反之失败
    • ResultSet executeQuery(String sql): 执行DQL(select)语句

4). ResultSet: 结果集对象,封装查询结果

  • boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,返回false,否则返回true

  • getXxx(param):获取数据

    • Xxx: 代表数据类型 如: int getInt() ,String getString()

    • param:

      • int: 代表列的编号,从 1开始,如:getString(1);

      • String: 代表列的名称,如:getDouble("salary")

  • 注意:

    • 使用步骤:

      1. 游标向下移动一行
      2. 判断是否有数据
      3. 获取数据
      while(resultSet.next()){
          //...
      }
      

5). PreparedStatement: 执行预编译sql语句的对象