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包,大家有需要的可以加我發送給大家