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

在這裏插入圖片描述

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