天天看點

C3P0資料庫連接配接池連接配接Mysql8.0.11的配置問題

C3P0連接配接Mysql8.0.11的配置問題

小白一個,這幾天,在學C3P0資料連接配接池,把遇到的一些問題記錄一下,希望能幫到你們。

題主的環境:

  1. Eclipse
  2. C3P0-0.9.5.2 可參考這裡下載下傳
  3. Mysql8.0.11

Eclipse目錄結構如下:

C3P0資料庫連接配接池連接配接Mysql8.0.11的配置問題

1.建立配置檔案c3p0-config.xml

在src(類路徑)目錄下添加配置檔案c3p0-config.xml
           
<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
//預設的配置
      <default-config>
         <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb_02?&amp;useSSL=false&amp;serverTimezone=UTC</property>
         <propertyname="driverClass">com.mysql.cj.jdbc.Driver</property>
         <property name="user">root</property>
         <property name="password">123456</property?
         <property name="acquireIncrement">3</property>
         <property name="initialPoolSize">10</property>
         <property name="minPoolSize">2</property>
         <property name="maxPoolSize">10</property>
         <named-config name="oracle"> 
     </default-config>
</c3p0-config>
           

請注意,這個配置檔案可能會出現的錯誤如下:

  • [ 1]對實體‘useSSL’ 的引用必須以 ‘;’ 分隔符結尾.

    -

    C3P0資料庫連接配接池連接配接Mysql8.0.11的配置問題

    解決辦法:在jdbcUrl中所有帶 ‘&’的後面加上amp并加上;

    如:

    jdbc:mysql://localhost:3306/資料庫名?&amp;useSSL=false&amp;serverTimezone=UTC

  • [2 ] not Suitable driver
    C3P0資料庫連接配接池連接配接Mysql8.0.11的配置問題

解決辦法:JDBC版本和C3P0版本不相容,題主開始用的mysql8.0.11+c3p0-0.9.1.2報了這個異常,後來去下了c3p0最新版(0.9.5.2)得以解決。

2.工具類C3P0Utils

package cn.lds.C3P0;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;

        public class C3P0Utils {
	private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
              //獲得資料源
	public static DataSource getDataSource() {
		return dataSource;
	}
             //獲得連接配接對象
	public static Connection getConnection() {
		try {
			return dataSource.getConnection();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	//釋放資源
	public static void release(Connection con, PreparedStatement par, ResultSet re) {
		if (re != null) {
			try {
				re.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (par != null) {
			try {
				par.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if (con != null) {
			try {
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}
}

           

3.測試類TestC3P0

package cn.lds.C3P0;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;


public class TestC3P0 {public static void main(String[] args) {
	TestAdd();
					}
	public static  void TestAdd() {
		Connection con =null;
		PreparedStatement ps=null;
		try {
			con=C3P0Utils.getConnection();
			String sql="insert into login_inf  values(?,?)";
			ps=con.prepareStatement(sql);
			
			ps.setString(1, "張飛");
			ps.setString(2, "123456");
			int row = ps.executeUpdate();
			if(row>0) {
				System.out.println("插入成功");
				
			}else {
				System.out.println("插入失敗");
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			C3P0Utils.release(con, ps, null);
		}
		}
           

4.運作結果

C3P0資料庫連接配接池連接配接Mysql8.0.11的配置問題

想想自己也是夠笨的,折騰了3小時。。。。