JDBC(一)JDBC编程六步

开始时间:2021-03-25

JDBC(Java Database Connectivity)

Java语言连接数据库

本质是一套接口
面向接口调用、面向接口写实现类,这都属于面向接口编程。

实现接口编程是为了解耦合,可参考复习

多态就是很典型的面向抽象编程

程序员面向JDBC写代码,JDBC提供接口,多方数据库厂家编写JDBC接口(数据库驱动,一个jar包)。
jar包中有很多class文件,class就是对JDBC实现的接口

例如:
编写一个程序员类

public class JavaProgrammer {
    public static void main(String[] args) throws Exception {
        JDBC jdbc = new MySQL();
        jdbc.getConnection();
        //通过反射机制创建对象
        Class c = Class.forName("MySQL");
        JDBC jdbc1 = (JDBC) c.newInstance();
        jdbc1.getConnection();
    }
}

编写一个接口类

public interface JDBC {
    /*
    连接数据库的方法
    */
    void getConnection();

}


编写一个类实现接口

public class MySQL implements JDBC {
    public void getConnection() {
        System.out.println("连接MySQL数据库成功");
    }
}

运行一下

连接MySQL数据库成功
连接MySQL数据库成功

当然,也可以通过配置文件来实现,可参考反射的资源绑定器部分

import java.util.ResourceBundle;

public class JavaProgrammer {
    public static void main(String[] args) throws Exception {    
       //通过反射机制创建对象
        ResourceBundle resourceBundle = ResourceBundle.getBundle("jdbc");
        String className = resourceBundle.getString("className");
        Class c = Class.forName(className);
        JDBC jdbc1 = (JDBC) c.newInstance();
        jdbc1.getConnection();

    }
}

JAVAEE规范与JAVASE规范区别

  • JAVA.SE:指Java类在单独执行,在单独处理业务时需要遵守语法规则。
    比如继承,访问权限,接口实现,控制语句,标识符命名。
  • JAVAEE: Java在进行商业开发时遵守开发规则
    在商业开发过程中,往往需要Java类与不同服务器进行沟通来解决当前业务I由于在商业开发过程中,Java需要与13种不同服务器进行沟通,因此sUN公司根据13种服务器特征指定13套接口,这13套接口统称为JAVAEE规范。接口中实现类由不同服务器厂商来提供。服务器厂商将完成接口实现类以JAR包形式提供。Java程序员通过jar包得到接口中实现类,从而实现与指定服务器之间交流。

配置Jar包

Jar包下载
在这里插入图片描述
选第一个download
在这里插入图片描述
no thanks直接下载

下载好后解压

然后去 计算机-属性-高级系统设置-高级-环境变量-新建 “classpath”
.;F:\编程学习\Java学习\mysql-connector-java-8.0.23\mysql-connector-java-8.0.23\mysql-connector-java-8.0.23.jar
注意 点号后接分号,再放路径名

将自己写的project打包成jar包

新建一个名叫provider的module
在这里插入图片描述
创建mydept类
在这里插入图片描述
再创建一个空的receiver的module

选择file-projectstructure-artifacts
新建一个empty的包
在这里插入图片描述
重命名后,将需要做成jar包的module拖进去

选择build -build artifacts
在这里插入图片描述
build后
找到jar位置,复制,粘贴到receiver里面
在这里插入图片描述

右键TestJar add library
绑定成功,可以使用了

JDBC编程六步

  • 第一步:注册驱动(作用:告诉Java程序,即将要连接的是哪个品牌的数据库)
  • 第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完之后一定要关闭
  • 第三步:获取数据库操作对象(专门执行sql语句的对象)
  • 第四步:执行SQL语句(DQLDML. …)
  • 第五步:处理查询结果集(只有当第四步执行的是select语句的时候,才有这第五步处理查询结果集。)
  • 第六步:释放资源(使用完资源之后一定要关闭资源。Java和数据库属于进程间的通信,开启之后一定要关闭。)

Driver是一个接口,没办法直接new
只能先new他的类,也叫Driver
接口Driver是 java.sql.Driver
类Driver是 com.mysql.jdbc.Driver

Driver.Class在mysql-connector-java-8.0.23下

1.注册驱动

测试一下

package JDBCTEST;

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCTest01 {
    public static void main(String[] args) {


        try {
            // java.sql.Driver driver
            //1.注册驱动
            //多态,父类型引用子类型对象
            Driver driver = new com.mysql.cj.jdbc.Driver();
            DriverManager.registerDriver(driver);
            System.out.println("ok");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

在DOS命令窗口里面测试,在Idea里面不行

C:\Users\Administrator>java F:\编程学习\Java学习\JDBC\Test.java
ok

2.获取连接

package JDBCTEST;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCTest01 {
    public static void main(String[] args) {

        try {
            // java.sql.Driver driver
            //1.注册驱动
            //多态,父类型引用子类型对象
            Driver driver = new com.mysql.cj.jdbc.Driver();
            DriverManager.registerDriver(driver);
            System.out.println("ok");
            //2.获取连接
            String url = "jdbc:mysql://localhost:3306/mysql";
            String user = "root";
            String password = "333";
            Connection connection = DriverManager.getConnection(url, user, password);
            System.out.println("DataBase connection Object:" + connection);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

URL统一资源定位符
通信协议+IP地址+端口+服务器资源名

3.获取数据库操作对象(Statement)

 statement = connection.createStatement();
C:\Users\Administrator>java F:\编程学习\Java学习\JDBC\Test02.java
ok
DataBase connection Object:com.mysql.cj.jdbc.ConnectionImpl@485966cc
Saving succeeds

4.执行sql

//4.执行sql
            String sql = "insert into dept(deptno,dname,loc)values(60,'Office','Chengdu')";
            //执行DML语句,这里记录了影响的数据库条数
            int count = statement.executeUpdate(sql);
            System.out.println(count == 1 ? "Saving succeeds" : "Saving fails");

6.释放资源

//6.释放资源
            //写在finally中保证一定执行
            //释放顺序从小到大
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {

                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

总的来一遍

package JDBCTEST;

import java.sql.*;

public class JDBCTest02 {
    public static void main(String[] args) {
    //再外部声明,方便后面关闭
        Statement statement = null;
        Connection connection = null;
        try {
            // java.sql.Driver driver
            //1.注册驱动
            //多态,父类型引用子类型对象
            Driver driver = new com.mysql.cj.jdbc.Driver();
            //调用方法完成注册
            DriverManager.registerDriver(driver);
            System.out.println("ok");
            
            //2.获取连接
            String url = "jdbc:mysql://localhost:3306/mysql";
            String user = "root";
            String password = "333";
            //建立connection
            connection = DriverManager.getConnection(url, user, password);
            System.out.println("DataBase connection Object:" + connection);

            //3.获取数据库操作对象(Statement)
            statement = connection.createStatement();

            //4.执行sql
            String sql = "insert into dept(deptno,dname,loc)values(60,'Office','Chengdu')";
            //执行DML语句,这里记录了影响的数据库条数
            int count = statement.executeUpdate(sql);
            System.out.println(count == 1 ? "Saving succeeds" : "Saving fails");

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {

            //6.释放资源
            //写在finally中保证一定执行
            //释放顺序从小到大
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {

                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

在这里插入图片描述

再来一份删除的

package JDBCTEST;

import java.sql.*;

public class JDBCTEST03 {
    public static void main(String[] args) {

        Driver driver = null;
        Connection connection = null;
        Statement statement = null;
        try {
            driver = new com.mysql.cj.jdbc.Driver();
            DriverManager.registerDriver(driver);
            System.out.println("register is ok");

            String url = "jdbc:mysql://localhost:3306/mysql";
            String user = "root";
            String password = "333";

            connection = DriverManager.getConnection(url, user, password);
            System.out.println("database connection object is " + connection);

            statement = connection.createStatement();
            String sql = "delete from dept where loc='Chengdu'";
            int count = statement.executeUpdate(sql);
            System.out.println(count == 1 ? "delete succeeds" : "delete fails");
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

在这里插入图片描述

在这里插入图片描述

  • java.sql.DriverManager类:这个类存在于JDK_1.8下。
    负责将数据库厂商提供Driver接口实现进行注册
    负责在Java工程与Mysql服务器之间建立一个【连接通道】

  • java.sql.connection接口:负责管理Java工程与数据库服务器之间【连接通道】

  • java.sql.Preparedstatement接口:负责管理在【连接通道】上进行往返交通的
    【交通工具】

  • java.sql.Resultset接口:负责管理数据库服务器返回【临时表】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值