c3p0连接池出现问题

c3p0连接池出现问题

//抽取类
package com.immoc.utils;

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

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class Source2 {
	
	private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
	/**
	 * 连接数据库
	 */
	public static Connection getConnection() throws Exception {
		Connection conn = dataSource.getConnection();
		return conn;
	}
	
	
	/**
	 * 关闭资源代码抽取
	 */
	public static void sourceClose(Statement stmt,Connection conn) {
		if(stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			stmt = null;//垃圾回收机制可以进行垃圾回收
		}
		
		if(conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			conn = null;
		}
	}
	
	/**
	 * 关闭资源代码抽取
	 */
	public static void sourceClose(Statement stmt,Connection conn,ResultSet rs) {
		if(stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			stmt = null;//垃圾回收机制可以进行垃圾回收
		}
		
		if(conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			conn = null;
		}
		
		if(rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			rs = null;
		}
	}
}

//测试类

package com.immoc.jdbc.demo1;


import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;


import org.junit.jupiter.api.Test;


import com.immoc.utils.Source2;


class JDBCDemo4 {

/**

* c3p0连接池测试

*/

@Test

void test() {

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

try {

//1.获得连接

conn = Source2.getConnection();

//2.SQL语句预处理对象

String sql = "select * from goods";

pstmt =conn.prepareStatement(sql);

rs = pstmt.executeQuery();

while(rs.next()) {

System.out.println(rs.getInt("id")+"  "+rs.getString("name")+"  "+rs.getFloat("price")+"  "+rs.getString("desp"));

}

}catch(Exception e) {

e.printStackTrace();

}finally {

Source2.sourceClose(pstmt, conn, rs);

}

}


}

//报错信息

java.lang.NoClassDefFoundError: Could not initialize class com.immoc.utils.Source2

at com.immoc.jdbc.demo1.JDBCDemo4.test(JDBCDemo4.java:33)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:389)

at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)

at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:167)

at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)

at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:163)

at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:110)

at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57)

at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:83)

at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)

at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)

at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)

at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)

at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)

at java.util.Iterator.forEachRemaining(Unknown Source)

at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)

at java.util.stream.AbstractPipeline.copyInto(Unknown Source)

at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)

at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)

at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)

at java.util.stream.AbstractPipeline.evaluate(Unknown Source)

at java.util.stream.ReferencePipeline.forEach(Unknown Source)

at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)

at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)

at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)

at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)

at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)

at java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)

at java.util.Iterator.forEachRemaining(Unknown Source)

at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)

at java.util.stream.AbstractPipeline.copyInto(Unknown Source)

at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)

at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)

at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)

at java.util.stream.AbstractPipeline.evaluate(Unknown Source)

at java.util.stream.ReferencePipeline.forEach(Unknown Source)

at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)

at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)

at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)

at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:51)

at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)

at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)

at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)

at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)

at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:86)

at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)

at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

5回答
好帮手慕阿莹 2018-11-26 11:51:36

1、建议同学用老师的这个JDBCUtiles试试。

http://img1.sycdn.imooc.com//climg/5bfb6d410001a8bf10000601.jpg

2、建议同学检查一下表中的字段是否一致。

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

提问者 大锤电气焊 2018-11-25 18:45:48
package com.immoc.utils;

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

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JDBCUtils {
	private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
	
	/**
	 * 获得连接对象
	 * @throws SQLException 
	 */
	public static Connection getConnection() throws SQLException {
		Connection conn = dataSource.getConnection();
		return conn;
	}
	/**
	 * 资源释放
	 */
	public static void SourceClose(Statement stmt,Connection conn,ResultSet rs) {
		if(stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			stmt = null;
		}
		
		if(conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			conn = null;
		}
		
		if(rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			rs = null;
		}
	}
	
	public static void SourceClose(Statement stmt,Connection conn) {
		if(stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			stmt = null;
		}
		
		if(conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			conn = null;
		}
		
		
	}
}


提问者 大锤电气焊 2018-11-23 15:52:42
//报错信息
十一月 23, 2018 3:35:52 下午 org.junit.vintage.engine.support.UniqueIdReader lambda$apply$1 警告: Could not read unique ID for Description; using display name instead: demo(com.immoc.demo.Test1) 十一月 23, 2018 3:35:52 下午 org.junit.vintage.engine.support.UniqueIdReader lambda$apply$1 警告: Could not read unique ID for Description; using display name instead: demo(com.immoc.demo.Test1)


  • 同学是在练习 6-6 PreparedStatement的使用:查询操作 中的操作么? 请同学贴一下你的JDBCUtils,以及相关的配置文件。 注意不要贴在回复里,会失去代码的格式。可以在回答里贴一下。祝学习愉快。
    2018-11-23 17:03:09
  • 提问者 大锤电气焊 回复 好帮手慕阿莹 #2
    老师,我是在练习连接池的内容,JDBCUtils代码如下,麻烦给看下,谢谢.
    2018-11-25 18:44:47
提问者 大锤电气焊 2018-11-23 15:52:15
package com.immoc.demo;

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

import org.junit.Test;

import com.immoc.utils.JDBCUtils;

public class Test1 {
	@Test
	public void demo() {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			//1.获得连接
			conn = JDBCUtils.getConnection();
			//2.SQL语句预处理对象
			String sql = "select * from goods";
			pstmt =conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while(rs.next()) {
				System.out.println(rs.getInt("id")+"  "+rs.getString("name")+"  "+rs.getFloat("price")+"  "+rs.getString("desp"));
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.SourceClose(pstmt, conn, rs);
		}
	}
	}
	


好帮手慕阿莹 2018-11-23 14:25:02

1、建议同学把项目clean一下,可以在http://img1.sycdn.imooc.com//climg/5bf79caa0001908302300046.jpgproject中找到clean,把代码清空后重新编译一下。

2、建议同学使用和老师一样的@Test

3、同学是网络延迟了么?看到同学提问了4个相同的问题,为了方便跟踪同学的问题,同一个问题建议同学提一次就可以的,老师都会看到同学的问题并解答的。

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

  • 提问者 大锤电气焊 #1
    import java.sql.PreparedStatement; import java.sql.ResultSet; import org.junit.Test; import com.immoc.utils.JDBCUtils; public class Test1 { @Test public void demo() { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { //1.获得连接 conn = JDBCUtils.getConnection(); //2.SQL语句预处理对象 String sql = "select * from goods"; pstmt =conn.prepareStatement(sql); rs = pstmt.executeQuery(); while(rs.next()) { System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getFloat("price")+" "+rs.getString("desp")); } }catch(Exception e) { e.printStackTrace(); }finally { JDBCUtils.SourceClose(pstmt, conn, rs); } } } 又出现问题了 老师: 十一月 23, 2018 3:35:52 下午 org.junit.vintage.engine.support.UniqueIdReader lambda$apply$1 警告: Could not read unique ID for Description; using display name instead: demo(com.immoc.demo.Test1)
    2018-11-23 15:36:31
  • 提问者 大锤电气焊 #2
    package com.immoc.demo; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.junit.Test; import com.immoc.utils.JDBCUtils; public class Test1 { @Test public void demo() { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { //1.获得连接 conn = JDBCUtils.getConnection(); //2.SQL语句预处理对象 String sql = "select * from goods"; pstmt =conn.prepareStatement(sql); rs = pstmt.executeQuery(); while(rs.next()) { System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getFloat("price")+" "+rs.getString("desp")); } }catch(Exception e) { e.printStackTrace(); }finally { JDBCUtils.SourceClose(pstmt, conn, rs); } } }
    2018-11-23 15:36:56
  • 提问者 大锤电气焊 #3
    //报错 十一月 23, 2018 3:35:52 下午 org.junit.vintage.engine.support.UniqueIdReader lambda$apply$1 警告: Could not read unique ID for Description; using display name instead: demo(com.immoc.demo.Test1) 十一月 23, 2018 3:35:52 下午 org.junit.vintage.engine.support.UniqueIdReader lambda$apply$1 警告: Could not read unique ID for Description; using display name instead: demo(com.immoc.demo.Test1)
    2018-11-23 15:37:31
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师