用java连接数据库时,jdbc连接不上connection类

用java连接数据库时,jdbc显示connection类无法连接是怎么回事?

img

代码有报错, 先把 module-info.java 文件删了,不然你依赖不上mysql 驱动包里的类
飘红的 类 ,鼠标指向这个类,把依赖 导入进来,然后再运行

未引入Msql 驱动 jar 包

        <!--数据库相关配置-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
package com.jianmu.tools;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author kong
 */
public class JdbcTools {
    public static final String DRIVER = "com.mysql.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/db_jianmu_pingxuan_log?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "root";

    static {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConn(String url, String username, String password) {
        try {
            return DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getSql(String database) {
        return "select table_name from information_schema.tables where table_schema='" + database + "'";

    }

    public static List<String> tables(String url, String username, String password, String database) {
        return tables(getConn(url, username, password), database);
    }

    public static void close(Connection conn, Statement statement, ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException ignored) {

        }

        try {
            if (statement != null) {
                statement.close();
            }
        } catch (SQLException ignored) {

        }
        try {
            if (conn != null) {
                conn.close();
            }
        } catch (SQLException ignored) {

        }
    }

    public static List<String> tables(Connection connection, String database) {
        List<String> tables = new ArrayList<>(100);
        Connection conn = null;
        Statement statement = null;
        ResultSet rs = null;
        try {
            conn = connection;
            if (conn != null) {
                statement = conn.createStatement();
                rs = statement.executeQuery(getSql(database));

                while (rs.next()) {
                    tables.add(rs.getString(1));
                }
                rs.close();
                statement.close();
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            close(conn, statement, rs);
        }
        return tables;

    }
}


  • 你看下这篇博客吧, 应该有用👉 :Java—Connection的常用功能
  • 除此之外, 这篇博客: Java的JDBC编程中的 1.数据库连接(Connection) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:
    一种是通过DriverManager(驱动管理类)的静态方法获取:
    // 加载JDBC驱动程序:反射,这样调用初始化com.mysql.jdbc.Driver类,即将该类加载到JVM方法
    区,并执行该类的静态方法块、静态属性。
    Class.forName("com.mysql.jdbc.Driver");
    // 创建数据库连接
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test ?user=root&password=root&useUnicode=true&characterEncoding=UTF-8");
    MySQL数据连接的URL参数格式如下:
    jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值
    
    
    因为在进行数据库的增删改查的时候都需要与数据库建立连接,所以可以在项目中将建立连接写成一个工具方法,用的时候直接调用即可:
    /**
    * 取得数据库的连接
    * @return 一个数据库的连接
    */
    public static Connection getConnection(){
    		Connection conn = null;
    		 try {
    			 	//初始化驱动类com.mysql.jdbc.Driver
    	            Class.forName("com.mysql.jdbc.Driver");
    	            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/exam?characterEncoding=UTF-8","root", "admin");
    	            //该类就在 mysql-connector-java-5.0.8-bin.jar中,如果忘记了第一个步骤的导包,就会抛出ClassNotFoundException
    	        } catch (ClassNotFoundException e) { 				
    	            e.printStackTrace();
    	        }catch (SQLException e) {							
    	            e.printStackTrace();
    	        }
    		 return conn;
    	}
    一种是通过DataSource(数据源)对象获取。实际应用中会使用DataSource对象
      MysqlDataSource db = new MysqlDataSource();
      db.setServerName("localhost");
      db.setPort(3306);
      db.setUser("root");
      db.setPassword("123456");
      db.setDatabaseName("04_03");//数据库名
      db.setUseSSL(false);
      db.setCharacterEncoding("utf-8");
      db.setServerTimezone("Asia/Shanghai");//固定参数,大小写都要一致

    以上两种方式的区别是:

    1. DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源时,通过connection.close()都是关闭物理连接。

    2. DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将Conncetion连接对象回收。

  • 您还可以看一下 王小科老师的零基础学Java编程—Java从小白到大咖课程中的 Connection接口小节, 巩固相关知识点