Eclipse中使用Spring对数据库连接的详细步骤 jar包 及可能出现的一系列报错原因和解决方案

1.导入jar包

	1.1 在工程下创建lib文件夹,直接拖入以下jar包,jar包下载地址在文章末尾

在这里插入图片描述

	1.2 按住ctrl键单击已经拖入的jar包,全选后右键选择Build path

在这里插入图片描述

2.配置属性文档

	2.1 右键src文件夹,创建file文件 **db.properties**

在这里插入图片描述
属性文档代码如下(记得删除多余备注和换行)

jdbc.user=root  <!--数据库用户名--!>

jdbc.password=324589 <!--数据库密码--!>

jdbc.driverClass=com.mysql.cj.jdbc.Driver <!--从mysql-connector-java 6开始
驱动变成这个 5之前是com.mysql.jdbc.Driver 相较于版本5多了一个时区 在url中需要加上serverTimezone的时区--!>

jdbc.jdbcUrl=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC <!--test字样处换成自己的数据库名--!>
 

3.配置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"
	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-4.0.xsd">
 
 
	<!-- 导入资源文件 -->
	<context:property-placeholder location = "classpath:db.properties"/>
	
	<!-- 配置C3P0数据源 -->
	<bean id = "dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="user" value="${jdbc.user}"></property>
		<property name="password" value="${jdbc.password}"></property>
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		<property name="driverClass" value="${jdbc.driverClass}"></property>
		
	</bean>
	
	<!-- 配置Spring的JdbcTemplate -->
	<bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

</beans>

4.创建实现类

import java.sql.SQLException;
import javax.sql.DataSource;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class JDBCTest {
	
	private ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
	
	@Test
	public void testDataSource() throws SQLException {
		DataSource dataSource = (DataSource) ctx.getBean(DataSource.class);
		System.out.println(dataSource.getConnection());
	}
	
}

如运行正常 控制台会输出如下字样

com.mchange.v2.c3p0.impl.NewProxyConnection

5.关于运行期间出现的一系列报错的原因和解决方案

5.1:mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException异常

问题:JDBC驱动类过时,从6.0开始驱动类使用“com.mysql.cj.jdbc.Driver” 并且要在url中加入时区。	  
第一步:使用最新的MySQL驱动jar包。
第二步:把驱动的类名改为:"com.mysql.cj.jdbc.Driver"
第三步:在访问mysql的url后加入时区设置

5.2:org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException异常

问题:xml配置文件有误 把我上面写的xml所有内容复制粘贴一份就可以了	

5.3:org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException异常

问题:xml配置文件有误 把我上面写的xml所有内容复制粘贴一份就可以了

5.4:java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory报错

问题:未导入commons-logging的jar包	导入上就可以了

5.4:java.lang.ClassNotFoundException: “com.mysql.cj.jdbc.Driver” at java.net.URLClassLoader.findClass报错

问题:jar包问题或是配置文件编写错误
第一步,检查 mysql-connector-java是否导进去,放在lib时候需要Add to Build path
第二步,检查mysql-connector-java jar版本是否跟本机安装的mysql版本匹配
第三步,如果确认包导进去,还是报错,极可能是自己编译文件出错,就比如我犯的错误,加了引号

5.5:The constructor ClassPathXmlApplicationContext(String…) refers to the missing type BeansExc

问题:jar包出现问题 删除spring-beansjar包 重新导入并build path入

5.6:Class ‘org.springframework.jdbc.core.JdbcTemplate’ not found

问题:缺少spring-jdbc的jar包 重新导入jar包并重新编写	
	<bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

5.6:No suitable driver

下面三种可能 可以一个个试过去
1:连接URL格式出现了问题
2:lib中没有加入合适的mysql_jdbc驱动
3:Buildpath中没有加入合适的mysql_jdbc驱动

5.6:Connections could not be acquired from the underlying database!
1:驱动配置有误
2:数据库连接地址有误
3:密码或帐号有误
4:数据库未启动或无权访问
5:项目未引入对应的驱动jar包mysql-connector-java-5.1.6-bin.jar
如果是数据库无权访问的话,可能是root用户没有远程访问权限 操作步骤如下

1. cmd或者mysql启动数据库
2. mysql -u root -p;
3. use mysql;
4. select  User,authentication_string,Host from user(查看root一栏的host权限是否为localhost 如果是则说明无权限需要修改)
5. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';  这里的123456为密码 %代表所有主机 也可以具体到你的主机ip地址
6. flush privileges; 这一步一定要做,不然无法成功 这句表示从mysql数据库的grant表中重新加载权限数据

在这里插入图片描述
执行完上述步骤 再次输入查询用户表命令 以查看root用户的权限是否已经成功修改

select  User,authentication_string,Host from user

如果GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';sql语句无法运行,可以尝试下面这段(至少我是没运行成功,没有语法错误没有填错 就是运行不了很无奈)

update user set host = '%' where user = 'root'; 

总之只要root用户的远程访问权限打开了就可以

后话

我只是个小白,上述的所有步骤从一窍不通到渐渐理解花了六七个小时,报错无数,一个一个慢慢解决几近崩溃,但从中学到的知识还是可观的,希望大家学习过程中,除了知道报错后的解决方案,还能理解到用这个方法可以解决的原因何在。,大家有什么问题可以一起探讨。jar包因为需要翻梯子,下载来很慢,我这里已经打包好完成连接数据库的所有需要用到的jar包,大家有需要的可以加我发送给大家

仅在学习过程中记录所学内容,如有何处不足还请大佬们指出,欢迎同行一起交流。chenhan-wu,记得备注csdn

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章