课程疑问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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回答
同学你好!
你的配置文件里面的属性书写有误,可以使用下面的配置测试一下
1 2 3 4 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | 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
1 2 3 4 5 6 7 | 老师我对问题2又有点问题,就是在使用C3p0配置文件时,使用配置文件的文件名除了和xml文件一样 要放在web目录下,文件名是否也要和xml文件一样要有特点的文件名,这样默认加载的时候根据这个 文件名来查找? 我尝试了一下,把xml文件删除,按照配置文件的方式,但是出错了: NO Suitable driver 没有何使的驱动 这是什么意思?按理来说,当我执行方法demo2()的时候,第一步就会去工具类JDBCUtils2 中创建常量池,并且加载驱动什么的,然后会默认加载配置文件,但是这里出错了,老师我哪里 出现了问题呀? |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | 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; } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 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积分~
来为老师/同学的回答评分吧