千家信息网

JDBC系列:(1)通过JDBC连接数据库

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,1、什么是JDBC2、JDBC连接数据库的三种方式2.1、第一种实现方式2.2、第二种实现方式2.3、第三种实现方式3、com.mysql.jdbc.Driver的内部实现1、什么是JDBC使用jav
千家信息网最后更新 2025年01月20日JDBC系列:(1)通过JDBC连接数据库
  • 1、什么是JDBC

  • 2、JDBC连接数据库的三种方式

  • 2.1、第一种实现方式

  • 2.2、第二种实现方式

  • 2.3、第三种实现方式

  • 3、com.mysql.jdbc.Driver的内部实现

1、什么是JDBC


使用java代码(程序)发送sql语句的技术

使用jdbc发送sql前提需要知道:数据库的IP地址、端口、数据名、用户名和密码。


JDBC的URL=协议名+子协议名+数据源名。a 协议名总是"jdbc"。b 子协议名由JDBC驱动程序的编写者决定。c 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。几种常见的数据库连接-------------------------------oracle------------------驱动:oracle.jdbc.driver.OracleDriverURL:jdbc:oracle:thin:@machine_name:port:dbname注:machine_name:数据库所在的机器的名称;      port:端口号,默认是1521-------------------------------mysql-------------------驱动:com.mysql.jdbc.DriverURL:jdbc:mysql://machine_name:port/dbname注:machine_name:数据库所在的机器的名称;      port:端口号,默认3306    ---------------------------SQL Server------------------驱动:com.microsoft.jdbc.sqlserver.SQLServerDriverURL:jdbc:microsoft:sqlserver://<:port>;DatabaseName=注:machine_name:数据库所在的机器的名称;      port:端口号,默认是1433--------------------------DB2--------------------------驱动:com.ibm.db2.jdbc.app.DB2DriverURL:jdbc:db2://<:port>/dbname注:machine_name:数据库所在的机器的名称;      port:端口号,默认是5000-------------------------------------------------------


2、JDBC连接数据库的三种方式




2.1、第一种实现方式


package com.rk.db.a_jdbc;import java.sql.Driver;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;/** * jdbc连接数据库 * 第一种方法:通过创建JDBC实现类的驱动类对象建立数据库连接 * @author RK *  */public class Demo01{        public static void main(String[] args) throws SQLException        {                        // jdbc协议:数据库子协议:主机:端口/连接的数据库   //                        String url = "jdbc:mysql://localhost:3306/testdb";                        String username = "root";                        String password = "root";                                                //1.创建驱动程序类对象                        Driver driver = new com.mysql.jdbc.Driver();                                                //设置用户名和密码                        Properties props = new Properties();                        props.setProperty("user", username);                        props.setProperty("password", password);                                                //2.连接数据库,返回连接对象                        Connection conn = driver.connect(url, props);                                                System.out.println(conn);        }}

2.2、第二种实现方式


package com.rk.db.a_jdbc;import java.sql.Driver;import java.sql.DriverManager;import java.sql.Connection;import java.sql.SQLException;/** * jdbc连接数据库 * 第二种方法:使用驱动管理器类连接数据库(注册了两次,没必要) * @author RK * */public class Demo02{        public static void main(String[] args) throws SQLException        {                String url = "jdbc:mysql://localhost:3306/testdb";                String username = "root";                String password = "root";                                Driver driver = new com.mysql.jdbc.Driver();                //1.注册驱动程序(可以注册多个驱动程序)                DriverManager.registerDriver(driver);                                //2.连接到具体的数据库                Connection conn = DriverManager.getConnection(url, username, password);                System.out.println(conn);        }}

2.3、第三种实现方式


package com.rk.db.a_jdbc;import java.sql.DriverManager;import java.sql.Connection;import java.sql.SQLException;/**  * jdbc连接数据库 * 第三种方法:使用加载驱动程序类  来 注册驱动程序(推荐使用这种方式连接数据库) * @author RK * */public class Demo03{        public static void main(String[] args) throws ClassNotFoundException, SQLException        {                String url = "jdbc:mysql://localhost:3306/testdb";                String user = "root";                String password = "root";                                //通过得到字节码对象的方式加载静态代码块,从而注册驱动程序                Class.forName("com.mysql.jdbc.Driver");                                //连接到具体的数据库                Connection conn = DriverManager.getConnection(url,user,password);                System.out.println(conn);        }}

3、com.mysql.jdbc.Driver的内部实现



在这里主要解释一个问题,也就是在2.3中,并没有写代码用DriverManager对com.mysql.jdbc.Driver的实例进行注册,原因就在于com.mysql.jdbc.Driver的源码当中。

在com.mysql.jdbc.Driver类中提供了一个static(静态)代码段,如下:

java.sql.DriverManager.registerDriver(new Driver());

完整代码如下:


------com.mysql.jdbc.Driver类中提供了static代码段,主动向DriverManager进行注册java.sql.DriverManager.registerDriver(new Driver());package com.mysql.jdbc;import java.sql.SQLException;public class Driver extends NonRegisteringDriver implements java.sql.Driver {    //    // Register ourselves with the DriverManager    //    static {        try {            java.sql.DriverManager.registerDriver(new Driver());        } catch (SQLException E) {            throw new RuntimeException("Can't register driver!");        }    }    /**     * Construct a new driver and register it with DriverManager     */    public Driver() throws SQLException {        // Required for Class.forName().newInstance()    }}




0