用java连接数据库时,jdbc显示connection类无法连接是怎么回事?
代码有报错, 先把 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;
}
}
// 加载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;
}
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连接对象回收。