Dbutils工具

  1. 使用properties配置文件
    开发中获得连接的4个参数(驱动、URL、用户名、密码)通常都存在配置文件中,方便后期维护,程序如果需要更换数据库,只需要修改配置文件即可。
    通常情况下,我们习惯使用properties文件。
    (1)文件位置:任意,建议src下
    (2)文件名称:任意,扩展名为properties
    (3)文件内容:一行一组数据,格式是“key=value”
    a) key命名自定义,如果是多个单词,习惯使用点分隔。例如:jdbc.driver
    b) value值不支持中文,如果需要使用非英文字符,将进行unicode转换。
    2.在项目跟目录下,创建文件,输入“db.properties”文件名。
     文件中的内容
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mydb
    user=root
    password=root

编写JDBC的工具类,获取数据库的连接
采用配置文件的方式

public class JDBCUtilsConfig {
	private static Connection con;
	private static String driverClass;
	private static String url;
	private static String username;
	private static String password;
	static {
		try {
			readConfig();
			Class.forName(driverClass);
			 con =DriverManager.getConnection(url,username,password);
		} catch (Exception e) {
			throw new RuntimeException(e + "数据库连接失败");
		}

	}

	private static void readConfig() throws IOException {
		InputStream resourceAsStream = JDBCUtilsConfig.class.getClassLoader()
				.getResourceAsStream("database.properties");
		Properties pro = new Properties();
		pro.load(resourceAsStream);
		driverClass = pro.getProperty("driverClass");
		url = pro.getProperty("url");
		username = pro.getProperty("username");
		password = pro.getProperty("password");
	}

	public static Connection getConnection() {
		return con;
	}

}

加载properties配置文件
Io读取文件,键值队存储到集合
从集合中以键值队方式获取数据库的连接信息,完成数据库的连接

public class PropertiesDemo {
	public static void main(String[] args) throws IOException, SQLException, ClassNotFoundException {
		InputStream resourceAsStream = PropertiesDemo.class.getClassLoader().getResourceAsStream("database.properties");
		Properties pro=new Properties();
		pro.load(resourceAsStream);
		String property = pro.getProperty("driverClass");
		String url = pro.getProperty("url");
		String username = pro.getProperty("username");
		String password = pro.getProperty("password");
		Class.forName(property);
		Connection connection = DriverManager.getConnection(url,username,password);
		System.out.println(connection);
	}

}

DBUtils
如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils。
DBUtils就是JDBC的简化开发工具包。需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具。
使用QueryRunnery类,实现对数据库表的 insert delete update
调用QueryRunnery类的方法update (Connection con,String sql,Oject…para)
Oject…para 可变参数,Object类型,SQL语句会出现?占位符
DBUtils是java编程中的数据库操作实用工具,小巧简单实用。
DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。
Dbutils三个核心功能介绍:
 QueryRunner中提供对sql语句操作的API.
 ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
 DbUtils类,它就是一个工具类,定义了关闭资源与事务处理的方法

public class QueryRunnerDemo {
  private static Connection con=JDBCUtilsConfig.getConnection();
  public static void main(String[] args) throws SQLException {
	//insert();
//	update();
	  delete();
}
  /*
   * 定义方法,使用QueryRunnery类的方法delete将数据表中的数据删除
   */
  public static void delete() throws SQLException{
	  //创建一个QueryRunner类对象
	  QueryRunner qr=new QueryRunner();
	  String sql="DELETE FROM sort WHERE sid=?";
	  int update = qr.update(con,sql,6);
	  System.out.println(update);
	  DbUtils.closeQuietly(con);
  }
  
  /*
   * 定义方法,使用QueryRunnery类的方法update将数据表中的数据修改
   */
  public static void update() throws SQLException{
	  //创建一个QueryRunner类对象
	  QueryRunner qr=new QueryRunner();
	  String sql="UPDATE sort SET sname=?,sprice=?,sdesc=? WHERE sid=?";
	  //将三个占位符的实际参数,写在数组中
	  Object[] obj={"化妆品",280,"美白保湿",2};
	  //调用QueryRunner方法update
	  int update = qr.update(con,sql,obj);
	  System.out.println(update);
	  DbUtils.closeQuietly(con);
	  
  }
  
  
  
  
	/*
	 * 定义方法,使用QueryRunner类的方法update向数据表中,添加数据
	 */
	public static void insert() throws SQLException{
		//创建QueryRunner类对象
		QueryRunner qr=new QueryRunner();
		String sql="INSERT INTO sort (sname,sprice,sdesc)VALUES (?,?,?)";
		//将三个占位符的实际参数,写在数组中
		Object[] obj={"衣袜",136.9,"促销"};
		//调用QueryRunner类的方法update执行SQL语句
		int update = qr.update(con,sql,obj);
		System.out.println(update);
		DbUtils.closeQuietly(con);
	}

}

ArrayHandler与ArrayListHandler查询

QueryRunner数据查询操作
调用QueryRunner类方法query(Connection con,Strinng sql,ResultSetHandler r,Object…params)
ResultSetHandler r 结果集的处理方式,传递ResultHandler接口实现类
Object…params SQL语句中的?占位符
注意:query方法返回值,返回的是T 泛型,具体返回值类型,跟随结果集处理方式变化

public class QueryRunnerDemo2 {
	private static Connection con = JDBCUtilsConfig.getConnection();

	public static void main(String[] args) throws SQLException {
		//arrayHandler();
		arrayListHandler();

	}
	/*
	 * 结果集第二种处理方法,ArrayListHandler
	 * 将结果集的每一行,封装到对象数组中,出现很多对象数组
	 * 对象数组存储到List集合
	 */
	public static void arrayListHandler() throws SQLException{
		QueryRunner qr=new QueryRunner();
		String sql="SELECT * from sort";
		//调用query方法,结果集处理的参数,传递实现类ArrayListHandel
		//方法返回值,每一行是第一行对象数组,存储到List
		List<Object[]> result=  qr.query(con, sql, new ArrayListHandler());
		//System.out.println(result);
		//集合遍历
		for (Object[] objects : result) {
			//遍历对象数组
			for (Object object : objects) {
				System.out.print(object+"  ");
			}
			System.out.println();
		}
		
	}
	

	/*
	 * 结果集第一种处理方式,ArrayHandler 将结果集的第一行存储到对象数组中 Object[]
	 */
	public static void arrayHandler() throws SQLException {
		QueryRunner qr = new QueryRunner();
		String sql = "select * from sort";
		// 调用方法query执行查询,传递连接对象,SQL语句,结果集处理方式实现类
		// 返回结果集
		ArrayHandler arrayHandler = new ArrayHandler();
		Object[] query = qr.query(con, sql, arrayHandler);
		for (Object object : query) {
			System.out.print(object);
		}
	}

}

BeanHandler与BeanListHandler查询

public class QueryRunnerDemo2 {
	private static Connection con = JDBCUtilsConfig.getConnection();

	public static void main(String[] args) throws SQLException {
		//beanHandler();
		beanListHandel();

	}
	/*
	 * 结果集第四种处理方法,BeanListHandle
	 * 将数据结果集的每一行数据,封装成javaBean对象
	 * 多个javaBean对象封装到List集合中
	 */
	public static void beanListHandel() throws SQLException{
		QueryRunner qr=new QueryRunner();
		String sql="SELECT * FROM sort";
		//调用方法传递结果集的实现类BeanListHandler
		//BeanListHandler(Class<T>type)
		List<Sort> query = qr.query(con, sql,new BeanListHandler<Sort>(Sort.class));
		for (Sort sort : query) {
			System.out.println(sort);
		}
	}

	/*
	 * 结果集的三种处理方法,BeanHandle
	 * 将结果集的第一行数据,封装成JavaBean对象
	 * 
	 * 注意:被封装成数据到javaBean对象,Sort类必须有空参数构造
	 */
	public static void beanHandler() throws SQLException{
		QueryRunner qr=new QueryRunner();
		String sql="SELECT * FROM sort";
		//调用方法,传递结果集实现类BeanHandler
		//BeanHandler(Class<T>type)
		Sort query = qr.query(con, sql,new BeanHandler<Sort>(Sort.class));
		System.out.println(query);
	}

}

ColumnListHandler与ScalarHandler查询

public class QueryRunnerDemo2 {
	private static Connection con = JDBCUtilsConfig.getConnection();

	public static void main(String[] args) throws SQLException {
		//arrayHandler();
		//arrayListHandler();
		//beanHandler();
		//beanListHandel();
		//columListHandler();
		scalarHandler();

	}
	/*
	 * 结果集第六种处理方式,ScalarHandler
	 * 对于查询后,只有1个结果
	 */
	public static void scalarHandler() throws SQLException{
		QueryRunner qr=new QueryRunner();
		String sql="SELECT COUNT(*) FROM sort";
		Long count = qr.query(con,sql, new ScalarHandler<Long>());
		System.out.println(count);
	}
	
	
	
	
	/*
	 * 结果集第五种处理方法,ColumuListHandler
	 * 结果集,指定列的数据,存储到List集合
	 * List<Object>每行列数据类型不同
	 */
	public static void columListHandler() throws SQLException{
		QueryRunner qr=new QueryRunner();
		String sql="SELECT * from sort";
		//调用方法query,传递结果集实现类ColumListHandler
		//实现类构造方法中,使用字符串的列名
		List<Object> query = qr.query(con,sql, new ColumnListHandler<Object>("sname"));
		for (Object object : query) {
			System.out.println(object);
		}
	}
	}

MapHandler与MapListHandler查询

public class QueryRunnerDemo2 {
	private static Connection con = JDBCUtilsConfig.getConnection();

	public static void main(String[] args) throws SQLException {
       mapListHandler();
	}
	/*
	 * 结果集第八种处理方式,MapListHandler
	 * 将结果集每一行存储到Map集合,键:列名,值:数据
	 * Map集合过多,存储到List集合
	 */
	public static void mapListHandler() throws SQLException{
		QueryRunner qr=new QueryRunner();
		String sql="SELECT * FROM sort";
		//调用方法query,传递结果集实现类MapListHandler
		//返回List集合,存储的是Map集合
		List<Map<String,Object>> query = qr.query(con,sql, new MapListHandler());
		for (Map<String, Object> map : query) {
			for(String key:map.keySet()){
				System.out.print(key+"..."+map.get(key));
			}
			System.out.println();
		}
	}
	
	
	/*
	 * 结果集第七种处理方法,MapHandler
	 * 将结果集第一行数据,封装到Map集合中
	 * Map<键,值>键:列名  值:这列的数据
	 */
	public static void mapHandler() throws SQLException{
		QueryRunner qr=new QueryRunner();
		String sql="SELECT * FROM sort";
		//调用方法query,传递结果集实现类MapHandler
		//返回值:Map集合,Map接口实现类,泛型
		Map<String, Object> query = qr.query(con ,sql, new MapHandler());
		for (String key:query.keySet()) {
			System.out.println(key+"..."+query.get(key));
		}
	}
}	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值