课程疑问
1.C3P0使用xml文件和配置文件一样都是放在类路径下面也就是src文件下嘛?
web工程下也是这样?
2.C3P0使用properties配置文件的方式是怎么样?就是一开始我们的
JDBCUtils使用:
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
去加载配置文件,这种就是使用配置文件的方式嘛?
3.在视频最后的时候,我们把创建连接池的步骤抽取到了工具类,然后直接把获取连接对象中
的方法中的加载驱动也去除掉了,而是直接用连接池常量去获得连接对象,为什么这里要去除
加载驱动?是因为在创建连接池对象的时候,内部会去自动加载驱动嘛?
//创建一个静态连接池常量
private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
/*
*获得连接的方法
*/
public static Connection getConnection() throws Exception {
//直接从连接池中获取连接对象
Connection conn = dataSource.getConnection();
return conn;
}44
收起
正在回答
7回答
同学你好!
你的配置文件里面的属性书写有误,可以使用下面的配置测试一下
c3p0.driverClass = com.mysql.jdbc.Driver c3p0.jdbcUrl = jdbc:mysql://localhost:3306/jdbctest c3p0.user = root c3p0.password =root
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
jia_蛙
2020-01-11 21:52:39
package com.zhou.jdbc.demo3;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.junit.Test;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.zhou.jdbc.utils.JDBCUtils;
import com.zhou.jdbc.utils.JDBCUtils2;
/**
* 连接池的测试类
* @author 25677
*
*/
public class DataSourceDemo1 {
@Test
/**
* 使用配置文的方式连接连接池
* C3P0有两种配置方式:
* 1.使用xx.properties属性文件
* 2.使用xml文件 默认的
* - 默认情况下C3P0会在类路径下面也就是src下面一个名为"c3p0-config.xml"文件
*
*/
public void demo2() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//1.获得连接:
//1.1 创建连接池
//每次都创建一个连接这样会照成资源浪费,所以我们把这部也抽取成一个工具类
//这样就能保证我们的连接池在一个程序中只被初始化
//ComboPooledDataSource dataSource = new ComboPooledDataSource();
//2.直接从连接池中获得连接:
//conn = dataSource.getConnection();
conn = JDBCUtils2.getConnection();
//3.编写SQL
String sql = "SELECT * FROM user";
//4.预编译SQL
pstmt = conn.prepareStatement(sql);
//5.因为没有占位符代表参数,所以这里不用设置参数
//6.执行SQL
rs = pstmt.executeQuery();
while(rs.next()) {
System.out.println(rs.getInt("uid") + " " + rs.getString("username") + " " +
rs.getString("password") + rs.getString("name"));
}
}catch(Exception e) {
e.printStackTrace();
}finally {
JDBCUtils2.release(rs, pstmt, conn);
}
}
}
------------------------------
package com.zhou.jdbc.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* JDBC的工具类
* @author 25677
*
*/
public class JDBCUtils2 {
//创建一个静态连接池常量,创建连接池对象时会自动注册驱动
private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
/*
*获得连接的方法
*/
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;
}
}
}
jia_蛙
2020-01-10 15:09:45
老师我对问题2又有点问题,就是在使用C3p0配置文件时,使用配置文件的文件名除了和xml文件一样 要放在web目录下,文件名是否也要和xml文件一样要有特点的文件名,这样默认加载的时候根据这个 文件名来查找? 我尝试了一下,把xml文件删除,按照配置文件的方式,但是出错了: NO Suitable driver 没有何使的驱动 这是什么意思?按理来说,当我执行方法demo2()的时候,第一步就会去工具类JDBCUtils2 中创建常量池,并且加载驱动什么的,然后会默认加载配置文件,但是这里出错了,老师我哪里 出现了问题呀?

package com.zhou.jdbc.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* JDBC的工具类
* @author 25677
*
*/
public class JDBCUtils2 {
//创建一个静态连接池常量
private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
/*
*获得连接的方法
*/
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;
}
}
}public class DataSourceDemo1 {
@Test
/**
* 使用配置文的方式连接连接池
* C3P0有两种配置方式:
* 1.使用xx.properties属性文件
* 2.使用xml文件 默认的
* - 默认情况下C3P0会在类路径下面也就是src下面一个名为"c3p0-config.xml"文件
*
*/
public void demo2() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//1.获得连接:
//1.1 创建连接池
//每次都创建一个连接这样会照成资源浪费,所以我们把这部也抽取成一个工具类
//这样就能保证我们的连接池在一个程序中只被初始化
//ComboPooledDataSource dataSource = new ComboPooledDataSource();
//2.直接从连接池中获得连接:
//conn = dataSource.getConnection();
conn = JDBCUtils2.getConnection();
//3.编写SQL
String sql = "SELECT * FROM user";
//4.预编译SQL
pstmt = conn.prepareStatement(sql);
//5.因为没有占位符代表参数,所以这里不用设置参数
//6.执行SQL
rs = pstmt.executeQuery();
while(rs.next()) {
System.out.println(rs.getInt("uid") + " " + rs.getString("username") + " " +
rs.getString("password") + rs.getString("name"));
}
}catch(Exception e) {
e.printStackTrace();
}finally {
JDBCUtils2.release(rs, pstmt, conn);
}
}
} 相似问题
登录后可查看更多问答,登录/注册
3. Java 数据库开发与实战应用
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程





恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星