1、什么是JDBC?

Java DataBase Connectivity
在Java语言中编写Sql语句,对Mysql数据库中的数据进行CRUD操作。

2、JDBC相关的类库在哪里?

java.sql.*

3、JDBC本质上是一堆什么呢?

java.sql.包下都是JDBC的接口,SUN公司制定的,JDBC是体现“接口作用”的非常经典的例子。
JDBC降低了耦合度,提高了扩展力。对于java程序员来说,不需要关心数据库是哪个品牌。只要面向JDBC接口编程就行!

JDBC整个程序的结构当中有三波人:

第一波:SUN公司,负责制定JDBC接口。这些接口已经写好了,在java.sql.*;
第二波:java.sql.*下面的所有接口都要有实现类,这些实现类是数据库厂家编写的。
我们连接的是Mysql数据库,Mysql数据库厂家的实现类在mysql-connector-java- 5.1.23-bin.jar
这个Jar包中很多.class字节码文件,这是mysql数据库厂家写的接口实现!
注意:如果连接的是Oracle数据库,你需要从网上下载Oracle的jar包。
mysql-connector-java-5.1.23-bin.jar 这个Jar包有一个专业的术语----Mysql的驱动。
如果是Oracle的Jar,被称为Oracle的驱动。
第三波:我们Java程序员,面向JDBC接口写代码就行!

4、JDBC开发之前的准备工作?

mysql-connector-java-5.1.23-bin.jar里是字节码,是class文件。
Java虚拟机的类加载器会去加载class文件,classpath没有配置的情况下,默认从当前路径下加载class。如果classpath配置死了,例如:classpath=D:\abc,则表示固定只从d:\abc目录下找class。
classpath=.;D:\course\04-JDBC\resources\MySql Connector Java 5.1.23\mysql-connector-java-5.1.23-bin.jar,.代表当前路径。
类加载器从当前路径下加载class,如果当前路径下没找到,则去D:\course\04-JDBC\resources\MySql Connector Java 5.1.23\mysql-connector-java-5.1.23-bin.jar找class文件。
jar包不需要解压,java虚拟机的类加载器有这个能力找到class文件。

JDBC编程六步

1. 注册驱动(Driver)
通知java程序我们即将要连接的是哪个品牌的数据库
2. 获取数据库连接(Connection)
Java进程和Mysql进程,两个进程之间的通道开启了
3. 获取数据库操作对象(Statement)
这个对象很重要,用这个对象执行SQL的
4. 执行SQL语句(ExecuteQuery)
执行CRUD操作
5. 处理查询结果集(Next)
如果第四步是Select语句,才有这个第五步
6. 释放资源(Close)
关闭所有的资源(因为JDBC毕竟是进程之间的通信,占用很多资源的,需要关闭!)
先释放Statement,再释放Connection,分别进行Try…Catch处理,放到Finally中关闭

JDBC六步:

1.第一种注册驱动的方法

public class JDBCTest {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try{
            //1.注册驱动
            DriverManager.registerDriver(new com.mysql.jdbc.Driver());
            //2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode","root","412368LUQ");
            //3.获取数据库操作对象
            stmt = conn.createStatement();
            //4.执行SQL
            String sql = "select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno";
            rs = stmt.executeQuery(sql);
            //5.处理查询结果集
            while(rs.next()){
                String ename = rs.getString("ename");
                String dname = rs.getString("dname");
                System.out.println(ename+","+dname);
            }
        }catch(SQLException e){
            e.printStackTrace();
        }finally {
            //6.释放资源
            if(rs != null){
                try{
                    rs.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(stmt != null){
                try{
                    stmt.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try{
                    conn.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

2.第二种注册驱动的方法

//注册驱动的第二种方式:类加载注册
public class JDBCTest04 {
    public static void main(String[] args) {

        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/bjpowernode","root","412368LUQ");
            //3.获取数据库操作对象
            stmt = conn.createStatement();
            //4.执行SQL语句
            String sql = "select a.ename as '员工',b.ename as '领导' from emp a left join emp b on a.mgr = b.empno";
            rs = stmt.executeQuery(sql);
            //5.处理查询结果集
            while(rs.next()){
                String ename = rs.getString("员工");
                String lname = rs.getString("领导");
                System.out.println(ename + "," + lname);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //6.释放资源
            if (rs != null){
                try{
                    rs.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if (stmt != null){
                try{
                    stmt.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if (conn != null){
                try{
                    conn.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }
}