课程疑问
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 星