JDBC本质上是一个介于应用程序和数据库之间的公共接口,通过对这个接口的实现,我们可以建立应用程序和数据库之间的连接,便捷的访问数据库数据。

不同版本的MySQL连接的参数是有一些小差别的,以下内容基于一个JDBC连接案例讲解连接数据库的过程。

数据库版本:MySQL8.0.29

准备工作(导入MySQL驱动)

首先,得确保你的MySQL版本和你的MySQL驱动是对应的,不要出现装的MySQL5.几版本用的最新8.几驱动的情况。

如果不清楚自己当前安装的MySQL版本的话,可以进入命令行输入mysql --version查看:

知道自己数据库版本之后就可以去MySQL官网下载对应驱动了

MySQL驱动下载地址:MySQL :: Download MySQL Connector/J (Archived Versions)

 下载完成后,找到文件,解压之后找到驱动的jar包

 赋值当前路径,接下来打开IDEA-进入设置找到Project Structure

点击Libraries,按下面步骤,将刚解压完的驱动路径粘贴找到

选中之后,点击ok,导入驱动。

到这里准备工作就完成了。

案例演示

新建一个jdbc测试类,编写jdbc连接程序,提示异常直接抛出,注意导对包,

public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //实现Driver接口
        //Driver接口是所有 JDBC 驱动程序需要实现的接口
        Driver driver = new Driver();//需要导包,可替换为new com.mysql.cj.jdbc.Driver();

        //提供用户信息和url
        String url = "jdbc:mysql://localhost:3306/db_demo?useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "123456";

        //注册驱动
        DriverManager.registerDriver(driver);

        //创建连接对象
        Connection connection = DriverManager.getConnection(url, username, password);

        //创建Statement对象,用于SQL语句
        Statement statement = connection.createStatement();
        //编写sql
        String sql = "SELECT * FROM t_demo";
        //接收sql执行结果
        //由于此处sql为查询语句,有返回值,所以需要一个接收结果的对象
        //当执行的sql为增、删、改操作时,是没有返回值的,也就不需要接收结果这一步
        ResultSet resultSet = statement.executeQuery(sql);
        //打印结果验证
        while(resultSet.next()){
            System.out.print("id="+resultSet.getObject("id")+" ");
            System.out.print("stuname="+resultSet.getObject("stuname")+" ");
            System.out.print("seat="+resultSet.getObject("seat")+" ");
            System.out.println();
        }
        //释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }

db_demo数据库表内容 

程序执行结果

以上是一个基本的jdbc程序,各项连接属性值都是写死的,一般在使用过程中都是将连接属性放在配置文件内,通过读取配置文件来获取连接信息,方便后续修改连接信息。

可修改为:

public static void main() throws IOException, SQLException, ClassNotFoundException {
        //创建问价输入流
        InputStream is = jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
        //将配置文件内容加载到properties集合
        Properties pros = new Properties();
        pros.load(is);

        String url = pros.getProperty("url");
        String username = pros.getProperty("user");
        String password = pros.getProperty("password");
        String driverClass = pros.getProperty("driverClass");

        //加载mysql驱动,会自动注册DriverManager
        Class.forName(driverClass);

        //获取连接
        Connection connection = DriverManager.getConnection(url, username, password);
        //创建Statement连接对象 用于执行SQL
        Statement statement = connection.createStatement();
        //编写sql语句
        String sql = "SELECT * FROM t_demo";
        //执行SQL并接受返回结果
        ResultSet resultSet = statement.executeQuery(sql);

        //遍历输出
        while(resultSet.next()){
            System.out.println("id="+resultSet.getObject("id"));
            System.out.println("stuname="+resultSet.getObject("stuname"));
            System.out.println("seat="+resultSet.getObject("seat"));
        }
        //释放连接
        resultSet.close();
        statement.close();
        connection.close();
    }
}

获取文件输入流语句分析

InputStream is = jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");

InputStream is = jdbcTest.class.getClassLoader().getResourceAsStream("jdbc.properties");

jdbcTest.class:类名,jdbcTest 是一个示例类名,表示当前代码所在的类。通过 getClass() 方法获取到当前类的运行时类对象。

getClassLoader():是一个类加载器方法,通过运行时类对象的 getClassLoader() 方法获取到当前类的类加载器。

getResourceAsStream("jdbc.properties"):类加载器的方法,用于加载资源文件。

getResourceAsStream() 接受一个资源的路径参数(相对于类路径),返回一个输入流(InputStream)对象。

配置文件内容

#配置文件放在src下,不能放在功能分块儿中,部署的时候会丢失
user=root
password=123456
url=jdbc:mysql://localhost:3306/db_demo?useSSL=false&serverTimezone=UTC
driverClass=com.mysql.cj.jdbc.Driver

自动注册原理

通过查看Driver源码,可以发现在类加载的时候,就已经自动注册驱动了,所以我们在使用的使用,只需要加载一下即可。

over!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐