报错了,一直就没调通

来源:7-2 C3P0连接池的使用

96年的nash

2019-04-26 16:39:01

package com.hxh.jdbc.demo3;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.junit.Test;

import com.hxh.utils.JDBCUtils;
import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 连接池的测试类
 * @author 胡小虎
 *
 */
public class DataSourceDemo1 {
	@Test
	/**
	 * 使用配置文件的方式
	 */
	public void demo2() {
		Connection connection = null;
		PreparedStatement pStatement = null;
		ResultSet resultSet = null;
		try {
			//获得连接
			ComboPooledDataSource dataSource = new ComboPooledDataSource();
			//从连接池中获得
			connection =dataSource.getConnection();
			//编写SQL
			String sql = "SELECT * FROM user";
			//预编译SQL
			pStatement = connection.prepareStatement(sql);
			//设置参数
			//执行SQL
			resultSet = pStatement.executeQuery();
			while(resultSet.next()) {
				int uid = resultSet.getInt("uid");
				String username = resultSet.getString("username");
				String password = resultSet.getString("password");
				String name = resultSet.getString("name");
				System.out.println(uid + "   " + username + "   " + password + "   " + name);
			}
					
		 } catch (Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.release(resultSet, pStatement, connection);
		}
		
	}
	
//	@Test
//	/**
//	 * 手动设置连接池
//	 */
//	public void demo1() {
//		
//		
//		//获得连接
//		Connection connection = null;
//		PreparedStatement pStatement = null;
//		ResultSet resultSet = null;
//		try {
//			//创建连接池
//			ComboPooledDataSource dataSource = new ComboPooledDataSource();
//			//获得连接池的参数
//			dataSource.setDriverClass("com.mysql.jdbc.Driver");
//			dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/jdbctest?useSSL=false&serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf-8");
//			dataSource.setUser("root");
//			dataSource.setPassword("djh,.525787961");
//			
//			dataSource.setMaxPoolSize(20);
//			dataSource.setInitialPoolSize(3);
//			
//			//获得连接
//			//从连接池中获得
//			connection =dataSource.getConnection();
//			//编写SQL
//			String sql = "SELECT * FROM user";
//			//预编译SQL
//			pStatement = connection.prepareStatement(sql);
//			//设置参数
//			//执行SQL
//			resultSet = pStatement.executeQuery();
//			while(resultSet.next()) {
//				int uid = resultSet.getInt("uid");
//				String username = resultSet.getString("username");
//				String password = resultSet.getString("password");
//				String name = resultSet.getString("name");
//				System.out.println(uid + "   " + username + "   " + password + "   " + name);
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}finally {
//			JDBCUtils.release(resultSet, pStatement, connection);
//		}
//	}
}
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>

  <default-config>
    <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbctest?useSSL=false&amp;serverTimezone=Hongkong&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true</property>
	<property name="user">root</property>
	<property name="password">abc</property>
	<property name="initialPoolSize">5</property>
	<property name="maxPoolSize">20</property>
  </default-config>
  
</c3p0-config>

http://img.mukewang.com/climg/5cc2c36a00014c3203440411.jpg

四月 26, 2019 4:35:26 下午 com.mchange.v2.log.MLog <clinit>

信息: MLog clients using java 1.4+ standard logging.

四月 26, 2019 4:35:26 下午 com.mchange.v2.c3p0.C3P0Registry banner

信息: Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10]

四月 26, 2019 4:35:26 下午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager

信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hgesxta2omujns157fk5m|4926097b, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.cj.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hgesxta2omujns157fk5m|4926097b, idleConnectionTestPeriod -> 0, initialPoolSize -> 5, jdbcUrl -> jdbc:mysql://localhost:3306/jdbctest?useSSL=false&serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf-8&autoReconnect=true, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 20, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]

四月 26, 2019 4:35:46 下午 com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run

警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@4d9a1c8b -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!

四月 26, 2019 4:35:46 下午 com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run

警告: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@4d9a1c8b -- APPARENT DEADLOCK!!! Complete Status: 

Managed Threads: 3

Active Threads: 3

Active Tasks: 

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@260f173 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1f03cbf0 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@3328f4e3 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)

Pending Tasks: 

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@67a190d2

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@624f0e3c

Pool thread stack traces:

Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,main]

java.lang.Thread.sleep(Native Method)

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)

com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,main]

java.lang.Thread.sleep(Native Method)

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)

com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,main]

java.lang.Thread.sleep(Native Method)

com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)

com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)



四月 26, 2019 4:36:46 下午 com.mchange.v2.async.ThreadPoolAsynchronousRunner processReplacedThreads

警告: Task com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1f03cbf0 (in deadlocked PoolThread) failed to complete in maximum time 60000ms. Trying interrupt().

四月 26, 2019 4:36:46 下午 com.mchange.v2.async.ThreadPoolAsynchronousRunner processReplacedThreads

警告: Task com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@260f173 (in deadlocked PoolThread) failed to complete in maximum time 60000ms. Trying interrupt().

四月 26, 2019 4:36:46 下午 com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask run

警告: com.mchange.v2.resourcepool.BasicResourcePool@75bd9247 -- Thread unexpectedly interrupted while performing an acquisition attempt.

java.lang.InterruptedException: sleep interrupted

at java.lang.Thread.sleep(Native Method)

at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)

at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)


四月 26, 2019 4:36:46 下午 com.mchange.v2.async.ThreadPoolAsynchronousRunner processReplacedThreads

警告: Task com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@3328f4e3 (in deadlocked PoolThread) failed to complete in maximum time 60000ms. Trying interrupt().

四月 26, 2019 4:36:46 下午 com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask run

警告: com.mchange.v2.resourcepool.BasicResourcePool@75bd9247 -- Thread unexpectedly interrupted while performing an acquisition attempt.

java.lang.InterruptedException: sleep interrupted

at java.lang.Thread.sleep(Native Method)

at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)

at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)


四月 26, 2019 4:36:46 下午 com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask run

警告: com.mchange.v2.resourcepool.BasicResourcePool@75bd9247 -- Thread unexpectedly interrupted while performing an acquisition attempt.

java.lang.InterruptedException: sleep interrupted

at java.lang.Thread.sleep(Native Method)

at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)

at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

package com.hxh.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * JDBC的工具类
 */
public class JDBCUtils {
	private static final String driverClass;
	private static final String url;
	private static final String username;
	private static final String password;
	
	static {
		//加载属性文件并解析:
		Properties properties = new Properties();
		//如何获得属性文件的输入流?
		//通常情况下使用类的加载器的方式进行获取
		
		InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
		
		try {
			
			properties.load(is);
		} catch (Exception e) {
			System.out.println("输入流发生错误");
		}
		
		driverClass = properties.getProperty("driverClass");
		System.out.println(driverClass);
		url = properties.getProperty("url");
		System.out.println(url);
		username = properties.getProperty("username");
		System.out.println(username);
		password = properties.getProperty("password");
		System.out.println(password);
	}
	
	/**
	 * 注册驱动的方法
	 * @throws ClassNotFoundException 
	 * 
	 */
	public static void loadDriver() throws ClassNotFoundException {
		Class.forName(driverClass);
	}
	
	/**
	 * 获得连接的方法
	 * @throws Exception 
	 */
	public static Connection getConnection() throws Exception {
		loadDriver();
		Connection connection = DriverManager.getConnection(url,username,password);
		return connection;
	}
	
	/**
	 * 获得Statement的方法
	 * @throws Exception 
	 *
	 */
	public static Statement getStatement() throws Exception {
		Connection connection = getConnection();
		Statement statement = connection.createStatement();
		return statement;
		
	}
	
	/**
	 * 资源释放
	 * 
	 */
	public static void release(Statement statement,Connection connection) {
		if(statement!=null) {
			try {
				statement.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				statement=null;
			}
		}
		
		if(connection!=null) {
			try {
				connection.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				connection=null;
			}
		}
	}
	
	public static void release(ResultSet resultSet,Statement statement,Connection connection) {
		if(resultSet!=null) {
			try {
				resultSet.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				resultSet=null;
			}
		}
		
		if(statement!=null) {
			try {
				statement.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				statement=null;
			}
		}
		
		if(connection!=null) {
			try {
				connection.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				connection=null;
			}
		}
	}

}


写回答

1回答

好帮手慕阿满

2019-04-26

同学你好,试了同学的代码并没有太大的问题,不过同学的JDBCUtils中的代码有点问题,使用c3p0数据库连接池后,不需要配置定义driverClass驱动等,这里建议同学新定义一个JDBCUtils1类,然后存放连接数据库连接池的配置信息,具体内容如下:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JDBCUtils1 {
	private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
	
	/**
	 * 获得连接的方法:
	 * @throws SQLException 
	 */
	public static Connection getConnection() throws Exception{
		Connection conn = dataSource.getConnection();
		return conn;
	}
	
	/**
	 * 资源释放
	 */
	public static void release(Statement stmt,Connection conn){
		if(stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			stmt = null;
		}
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn = null;
		}
	}
	
	public static void release(ResultSet rs,Statement stmt,Connection conn){
		if(rs!= null){
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			rs = null;
		}
		if(stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			stmt = null;
		}
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn = null;
		}
	}
}

然后在DataSourceDemo1类中,使用JDBCUtils1调用release()方法再试试。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

0

0 学习 · 8016 问题

查看课程