zoukankan      html  css  js  c++  java
  • java-DBUtils的练习题

    DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
    DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。

    Dbutils三个核心功能介绍
    QueryRunner中提供对sql语句操作的API.
    ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
    DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法

    package cn.incast.homework31DBUtils;
    
    import java.math.BigDecimal;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.List;
    
    import org.apache.commons.dbutils.QueryRunner;
    import org.apache.commons.dbutils.handlers.ArrayHandler;
    import org.apache.commons.dbutils.handlers.ArrayListHandler;
    import org.apache.commons.dbutils.handlers.BeanHandler;
    import org.apache.commons.dbutils.handlers.BeanListHandler;
    import org.apache.commons.dbutils.handlers.ColumnListHandler;
    import org.apache.commons.dbutils.handlers.ScalarHandler;
    
    public class DBUtilsDemo {
    	// QueryRunner中提供对sql语句操作的API
    	// update(Connection conn, String sql, Object... params)
    	// query(Connection conn, String sql, ResultSetHandler<T> rsh, Object...
    	// params)
    
    	// ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
    	// DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法
    
    	public static void main(String[] args) throws Exception {
    //		insert();
    //		arrayHandler();
    //	   arrayListHandler();
    //		arrayListHandler();
    //		beanHandler();
    //		beanListHandler();
    //		columnListHandler();
    		scalarHandler();
    	}
    
    	private static void scalarHandler() throws Exception {
    	//ScalarHandler:它是用于单数据。例如select count(*) from 表操作
    		
    		Connection con = JDBCUtils.getConnection();
    		QueryRunner qr = new QueryRunner();
    		
    //		String sql = "SELECT AVG(dscore),dclassroom FROM test GROUP BY dclassroom"; //即使查询语句能查询到多行数据,它也只取第一行
    		String sql="SELECT AVG(dscore)  FROM test";
    //		String sql="SELECT sum(dscore),AVG(dscore),dclassroom FROM test";  实验总结:它只能取出第一行第一列的那个数
    		String  score = String.valueOf(qr.query(con, sql, new ScalarHandler<Integer>())) ;
    		System.out.println(score);
    	}
    
    	private static void columnListHandler()  throws Exception{
    		//ColumnListHandler:将结果集中 指定的列的字段值,封装到一个List集合中
    		Connection con = JDBCUtils.getConnection();
    		QueryRunner qr =new QueryRunner();
    		String sql= "SELECT dname FROM test WHERE dscore>?"; //注意:只查询一列
    		List<String> list =qr.query(con, sql,new ColumnListHandler<String>(),50);
    		for(String s:list){
    			System.out.println(s);
    		}
    	}
    
    	private static void beanListHandler() throws Exception{
    	//BeanListHandler:将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
    		Connection con = JDBCUtils.getConnection();
    		QueryRunner qr = new QueryRunner();
    		String sql = "SELECT * FROM test";
    		
    		List<Student> list =qr.query(con, sql, new BeanListHandler<Student>(Student.class));
    		for(Student s:list){
    			System.out.println(s.getId()+"	"+s.getDName()+"	"+s.getDage()+"	"+s.getDclassroom()+"	"+s.getDscore());
    		}
    		
    	}
    
    	private static void beanHandler() throws Exception {
    		//BeanHandler	:将结果集中第一条记录封装到一个指定的javaBean中
    		Connection con = JDBCUtils.getConnection();
    		QueryRunner qr = new QueryRunner();
    		String sql="SELECT * FROM test where dname=?";
    		Object[] param= {"鸣人"};
    		Student stu= qr.query(con, sql, new BeanHandler<Student>(Student.class),param);
    		System.out.println(stu);
    	}
    
    	private static void arrayListHandler() throws Exception{
    		//将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
    		Connection con = JDBCUtils.getConnection();
    		QueryRunner qr = new QueryRunner();
    		String sql = "SELECT * FROM test";
    		List<Object[]> list =qr.query(con, sql, new ArrayListHandler());
    		for(Object[] array:list){
    			for(Object obj :array){
    				System.out.print(obj+"	");
    			}
    			System.out.println();
    		}
    	}
    
    	public static void insert() throws Exception {
    		try {
    			Connection con = JDBCUtils.getConnection();
    			QueryRunner qr = new QueryRunner();
    			String sql = "insert into test(dname,dscore,dclassroom,dage) VALUES(?,?,?,?)";
    			int line = qr.update(con, sql, "鸣人", 96, "A班", 14);
    			System.out.println(line);
    
    		} catch (SQLException e) {
    
    			e.printStackTrace();
    			throw new RuntimeException("新增失败");
    		}
    
    	}
    
    	public static void arrayHandler() throws Exception{
    	//ArrayHandler:将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
    		Connection con = JDBCUtils.getConnection();
    		QueryRunner qr = new QueryRunner();
    		Object[] params = {"小明"};
    		String sql="select * from test where dname=?";
    		Object[] objArray = qr.query(con, sql, new ArrayHandler(),params);
    		for(Object o:objArray){
    			System.out.print(o+"  ");
    		}
    		
    		
    	}
    }
    
    

    连接池

    实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池

    连接池概述

     概念
    用池来管理Connection,这样可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。
     规范
    Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!
    常见的连接池:DBCP、C3P0。

    DBCP连接池

    DBCP也是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池

    自己编写的JDBCUtils工具类可改成如下

  • 相关阅读:
    C#语法造成的小问题(编译原理知识)
    COM套间对.NET程序使用COM对象的影响
    为什么连接字符串一定要用StringBuilder(介绍CLR Profiler)
    编译原理系列文章
    .NET与COM互操作系列
    Windows XP SidebySide功能对VC程序的影响
    引起FileNotFoundException原因通用分析过程
    Flex组件的项目渲染器(ItemRenderer)使用总结
    Flex组件开发总结20090209
    如何去掉超链接图片外蓝色的边框
  • 原文地址:https://www.cnblogs.com/czy16/p/8366923.html
Copyright © 2011-2022 走看看