JDBC进阶学习笔记

it2025-10-11  2

JDBC进阶


JDBC连接池

1. 常见的JDBC连接池

c3p0 开源连接池druid 阿里的开源数据库连接池DBCP 开源连接池

2. c3p0连接池的使用

导入jar包(1个)执行连接操作

c3p0数据库的配置文件是.xml类型的

//获得DataSource DataSource ds = new ComboPooledDataSource(); //可以使用指定名称配置 ComboPooledDataSource("otherc3p0"); //获取数据库连接 Connection conn = ds.getConnection();

3. druid连接池的使用

导入jar包(1个)执行连接操作

druid数据库连接池的配置文件是.properties类型的

//先获取druid的配置文件 Properties properties = new Properties(); ClassLoader classLoader = 类名.class.getClassLoader(); InputStream is = classLoader.getResourceAsStream("druid.properties"); properties.load(is); //可以用一句实现 //properties.load(类名.class.getClassLoader.getResourceAsStream("druid.properties")); //获取DataSource,使用DruidDataSourceFactory的createDataSource()方法获取DataSource对象 DataSource ds = DruidDataSourceFactory.createDataSource(properties); //获取连接 Connection conn = ds.getConnection();

4. 创建自己的JDBC工具包(使用druid)

private static DataSource ds; static { Properties properties = new Properties(); // ClassLoader classLoader = JDBCUtils.class.getClassLoader(); // InputStream is = classLoader.getResourceAsStream("druid.properties"); try { properties.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties")); //利用jdbc连接池会自己获得连接 通过DruidDataSourceFactory的createDataSource()方法得到DataSource对象 ds = DruidDataSourceFactory.createDataSource(properties); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * @return 数据库连接 * @throws SQLException */ public static Connection getConnection() throws SQLException { return ds.getConnection(); } /** * 归还连接 * @param rs 结果集 * @param stmt SQL语句 * @param conn 连接 */ public static void close(ResultSet rs, Statement stmt,Connection conn){ if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); //归还连接 } catch (SQLException e) { e.printStackTrace(); } } } /** * 返回数据库连接池对象 * @return ds 数据库连接池对象 */ public static DataSource getDataSource(){ return ds; } /** * 关闭连接2 * @param stmt sql语句 * @param conn 连接 */ public static void close(Statement stmt,Connection conn){ close(null,stmt,conn); }

JdbcTemplate

1. 使用JdbcTemplate的目的

方便我们使用数据库的sql语句对数据库进行操作.

2. JDBCTemplate的使用

导入jar包(5个) 获得JdbcTemplate: //得到数据库连接池的DataSource对象 JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

sql中的增删改操作: update()方法

template.update(sql,...args);template.update(sql);

sql中的查询操作: query()方法

单条语句的查询 queryForMap()方法 Map<String,Object> map = template.queryForMap(sql,...args); 多条语句的查询 queryForList()方法

将每一条记录封装为一个Map集合

//获取查询结果 List<Map<String,Object>> list = template.queryForList(sql,...args); //将查询结果进行遍历 for(Map<String,Object> map : list){ System.out.println(map); }//打印出每一条map的值 封装为JavaBean对象 query()方法 query(String sql,RowMapper rowMapper) //获取查询结果,使用自定义创建RowMapper对象,使用了自定义Stu类(x并没有任何的简化) List<Stu> list = template.query(sql2, new RowMapper<Stu>() { @Override public Stu mapRow(ResultSet rs, int i) throws SQLException { //创建对象 Stu stu = new Stu(); //获取值 String uid = rs.getString("uid"); String uname = rs.getString("uname"); String upassword = rs.getString("upassword"); //设置值 stu.setUid(uid); stu.setUname(uname); stu.setUpassword(upassword); return stu; } }); //2.使用已提供的实现类进行操作 Stu为自己定义的类 List<Stu> list = temp.query(sql3, new BeanPropertyRowMapper<Stu>(Stu.class)); //遍历集合 for (Stu stu : list) { System.out.println(stu); }

Stu类的定义 (尽量使用包装类,防止因为null值报错!)

public class Stu { private String uid; private String uname; private String upassword; public Stu() { } public Stu(String uid, String uname, String upassword) { this.uid = uid; this.uname = uname; this.upassword = upassword; } public String getUid() { return uid; } public void setUid(String uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUpassword() { return upassword; } public void setUpassword(String upassword) { this.upassword = upassword; } @Override public String toString() { return "Stu{" + "uid='" + uid + '\'' + ", uname='" + uname + '\'' + ", upassword='" + upassword + '\'' + '}'; } } 封装为Object对象 queryForObject()方法

一般用于执行聚合函数

template.queryForObject(sql,class) /* class用于解释接受的类型如: sql = "select count(*) from table"; template.queryForObject(sql,long.class); */
最新回复(0)