如何修复spring jdbc中“获取JDBC连接失败”的问题

问题描述 投票:0回答:1

我是 Spring jdbc 的新手,在将其连接到时遇到错误 MySQL数据库,我已经阅读了所有教程但仍然没有找到 问题。

** Following Error occurred **

我的程序开始了......线程“main”中的异常org.springframework.jdbc.CannotGetJdbcConnectionException:失败 获取 JDBC 连接;嵌套异常是 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: 无法创建与数据库服务器的连接。在 org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82) 在 org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:612) 在 org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:862) 在 org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:917) 在 org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:927) 在 com.spring.jdbc.App.main(App.java:24) 引起的: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: 无法创建与数据库服务器的连接。在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机 方法)在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) 在 java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) 在 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:409) 处 com.mysql.jdbc.Util.getInstance(Util.java:384) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918) 在 com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2588) 在 com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2321) 在 com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:832) 在 com.mysql.jdbc.JDBC4Connection。(JDBC4Connection.java:46)位于 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(本机 方法)在 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) 在 java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) 在 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:409) 处 com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417) 在 com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344) 在 java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681) 在 java.sql/java.sql.DriverManager.getConnection(DriverManager.java:190) 在 org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:154) 在 org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:145) 在 org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:205) 在 org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:169) 在 org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158) 在 org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116) 在 org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79) ... 5 更多 引起:java.lang.NullPointerException:无法调用 “java.util.Map.get(Object)”因为“this.serverVariables”为空 com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding(ConnectionImpl.java:3307) 在 com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1985) 在 com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1911) 在 com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1288) 处 com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2506) 在 com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2539) ... 25 个以上

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.spring.jdbc</groupId>
<artifactId>springjdbc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>springjdbc</name>
<url>http://maven.apache.org</url>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> 
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.2.3.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.3.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.2.3.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.30</version>
    </dependency>


    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>


</dependencies>

config.xml

    <?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context=" http://www.springframework.org/schema/context" 
xmlns:p="http://www.springframework.org/schema/p" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd 
http://www.springframework.org/schema/Context 
http://www.springframework.org/schema/context/spring-context.xsd">

<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" name="ds">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/springjdbc"/>
    <property name="username" value="root" />
    <property name="password" value="root" />
</bean>

<bean class="org.springframework.jdbc.core.JdbcTemplate" name="template" >
    <property name="dataSource">
        <ref bean="ds" />
    </property>
</bean>

</beans>

App.java

package com.spring.jdbc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "My Program started......." );
        // spring jdbc => JdbcTemplate
        ApplicationContext context = new ClassPathXmlApplicationContext("com/spring/jdbc/config.xml");
        JdbcTemplate template = context.getBean("template",JdbcTemplate.class);
        
        //Insert Query
        String query = "insert into student(id,name,city) values(?,?,?)";
        
        //fire Query
        int result = template.update(query,456,"Pooja Joshi","Pune");
        System.out.println("number of records inserted.."+ result);
        
        
        
    }
}

学生.java

 package com.spring.jdbc;

public class Student {
    private int id;
    private String name;
    private String city;
    
    public Student() {
        // TODO Auto-generated constructor stub
    }

    public Student(int id, String name, String city) {
        super();
        this.id = id;
        this.name = name;
        this.city = city;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", city=" + city + "]";
    }
}
spring spring-boot spring-mvc spring-jdbc mysql-connector
1个回答
0
投票
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

面临同样的错误。使用最新的 mysql-connector-java 依赖项。

© www.soinside.com 2019 - 2024. All rights reserved.