如何修复“无法获得JDBC连接”在春季JDBC

发布于 2025-02-13 23:49:34 字数 9351 浏览 1 评论 0原文

我是新来的使用Spring JDBC,并且将其连接到 MySQL数据库,我已经阅读了所有教程,但仍未找到 问题。

** Following Error occurred **

我的程序开始....... 获得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)at com.mysql.jdbc.util.getinstance(util.java:384)at com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:1013)at com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:987)at com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:973)at com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:918)at com.mysql.jdbc.connectionimpl.connectonetryonly(ConnectionImpl.java:2588) 在 com.mysql.jdbc.connectionimpl.createnewio(ConnectionImpl.java:2321) 在com.mysql.jdbc.connectionimpl。(ConnectionImpl.java:832)at com.mysql.jdbc.jdbc4connection。(jdbc4connection.java:46)at 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)at com.mysql.jdbc.connectionimpl.getInstance(ConnectionImpl.java:417)at 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.getConnection fromdrivermanager(drivermanagerdatasource.java:154) 在 org.springframework.jdbc.datasource.drivermanagerdatasource.getConnectionFromDriver(drivermanagerdatasource.java:145) 在 org.springframework.jdbc.datasource.abstractdriverbasseddatasource.getConnectionFromDriver(AbstractDriversBasedDataSource.java:205) 在 org.springframework.jdbc.datasource.abstractdriverbasseddatasource.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”为null com.mysql.jdbc.connectionimpl.getServerCharacterCodeDing(ConnectionImpl.java:3307) 在com.mysql.jdbc.mysqlio.SendConnectionAttributes(mysqlio.java:1985) 在 com.mysql.jdbc.mysqlio.proceedhakehakehakewithpluggablablabableAthentication(mysqlio.java:1911) 在com.mysql.jdbc.mysqlio.dohandshake(mysqlio.java:1288)at 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);
        
        
        
    }
}

student.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 + "]";
    }
}

I'm new using Spring jdbc and I'm having an error connecting it to
MySQL Database, I already read all tutorials but still haven't found
the problem.

** Following Error occurred **

My Program started....... Exception in thread "main" org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to
obtain JDBC Connection; nested exception is
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
Could not create connection to database server. at
org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
at
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:612)
at
org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:862)
at
org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:917)
at
org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:927)
at com.spring.jdbc.App.main(App.java:24) Caused by:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
Could not create connection to database server. at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method) at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at
com.mysql.jdbc.Util.getInstance(Util.java:384) at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013) at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973) at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918) at
com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2588)
at
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2321)
at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:832) at
com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:46) at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method) at
java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at
java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at
java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at
java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) at
com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417) at
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)
at
java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681)
at
java.sql/java.sql.DriverManager.getConnection(DriverManager.java:190)
at
org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:154)
at
org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:145)
at
org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:205)
at
org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:169)
at
org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
at
org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
at
org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
... 5 more Caused by: java.lang.NullPointerException: Cannot invoke
"java.util.Map.get(Object)" because "this.serverVariables" is null at
com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding(ConnectionImpl.java:3307)
at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1985)
at
com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1911)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1288) at
com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2506)
at
com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2539)
... 25 more

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);
        
        
        
    }
}

Student.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 + "]";
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

叹倦 2025-02-20 23:49:34
<!-- 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依赖性。

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

Was facing the same error. Use the latest mysql-connector-java dependency.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文