如何修复“无法获得JDBC连接”在春季JDBC
我是新来的使用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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
正面临同样的错误。使用最新的MySQL-Connector-Java依赖性。
Was facing the same error. Use the latest mysql-connector-java dependency.