dbutils的查询和插入数据操作及CSDN如何快速转载别人的博客?

Apache Commons DbUtils是一个简化JDBC操作的工具库,能有效解决数据库连接管理和查询结果集封装的问题。本文详细介绍了如何使用DbUtils进行数据的插入和查询操作,包括注册驱动、获取连接、创建QueryRunner对象、执行SQL以及结果处理和资源释放。示例代码展示了如何通过DbUtils进行增删改查操作,以及防止SQL注入的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSDN如何快速转载别人的博客?
1.CSDN博客页面右键,点击【检查,快捷键F12】
2.如果需要转载全文,则在html代码下侧点击选中article_content 即可,会在代码框中自动选中article_content相关代码
3.在选中html的article_content代码处右键,点击【Copy】,再点击【Copy outerHTML】即可,至此,博客内容的html代码复制完成
4.新建博客,在markdown编辑器中粘贴以上html代码。注意:是markdown编辑器,CSDN博客默认的是html编辑器,在博客设置中修改博客编辑器成markdown编辑器(可直接打开此网址:http://write.blog.csdn.net/mdeditor)。在html编辑器中是无法将html代码转换成相应博客内容的

正文

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
原生jdbc的操作出现了两个比较棘手的问题:
1、数据库连接对象Connection不断的创建与销毁是很占用内存的,利用率不高,程序性能比较低下,尤其是并发访问量过大时,程序容易崩溃!
2、查询结果集在封装成实体类对象时,是一件比较恶心的事情,太过复杂!但是封装又是势在必行的一件事情!因为我们程序内,最常用的与数据库的交互就是查询数据!

为了解决查询结果集封装以及sql语句执行的复杂,引入一个jdbc的工具类:DbUtils,这个第三方工具,完美的解决了原生jdbc中的复杂操作,尤其是查询操作!
使用DbUtils的步骤:
1、注册驱动
2、获取数据库连接对象
3、获取执行sql语句的QueryRunner对象
4、使用QueryRunner对象调用方法,传递sql语句,操作数据库
5、处理结果
6、释放资源
示例代码:
在使用之前,需要导入dbutils的jar包

/*
	 	以添加数据为例,讲解DbUtils的使用
	 */
	public static void insertDemo() throws ClassNotFoundException, SQLException {
		//1、注册驱动
		Class.forName("com.mysql.jdbc.Driver");
		//2、获取数据库连接对象
		Connection connection = 
				DriverManager.getConnection("jdbc:mysql://localhost:3306/doubleseven",
						"root", "123");
		//3、获取执行sql语句的QueryRunner对象
		QueryRunner qRunner = new QueryRunner();
		//4、使用QueryRunner对象调用方法,传递sql语句,操作数据库
		/*
		 	原生jdbc中,增删改调用的是executeUpdate方法
		 	使用DbUtils,增删改调用的是update方法,返回值依旧是整型数字,代表影响的行数
		 		记住两个方法:
		 		(1)、传入连接对象、传入sql语句
		 		(2)、传入连接对象、传入sql语句、传入可变参数
		 	当你的sql语句中,数据的来源是不确定的,我们可以在书写sql语句时,使用?来表示,那么我们就需要传递参数来为?绑定值!
		 	如果书写的sql语句中没有不确定的值,那么就不需要传递参数绑定数据!
		 	使用?绑定数据,除了能够适应于动态数据的传入,还能有效的防止sql注入的问题!!!
		 		sql注入:就是传入的内容中包含了某些sql语句的关键字,从而影响了整个sql语句的语义,导致最终的结果出现偏差!!!
		 	用户表:username password
		 			zhangsan 	123
		 	select * from user where username = zhangsan or 1 = 1 and password = 1234567890;
		 	zhangsan or 1 = 1
		 */
		//qRunner.update(connection, "insert into student values (null, '浩飞', '男', '166')");
		int row = qRunner.update(connection, "insert into student values (null, ?, ?, ?)", 
				"刘博", "男", "188");
		//5、处理结果
		System.out.println(row > 0 ? "添加成功" : "添加失败");
		//6、释放资源
		DbUtils.close(connection);
	}
/*
 	使用DbUtils完成查询操作
 */
public static void selectDemo() throws ClassNotFoundException, SQLException {
	Class.forName("com.mysql.jdbc.Driver");
	Connection connection = 
			DriverManager.getConnection("jdbc:mysql://localhost:3306/doubleseven",
					"root", "123");
	QueryRunner qRunner = new QueryRunner();
	/*
	 	如果执行的sql语句是查询sql,那么此时调用的方法为query()方法!
	 		连接对象、sql语句、结果集对象
	 		连接对象、sql语句、结果集对象、可变参数
	 	查询的sql语句,肯定会得到结果集,那么DbUtils针对不同的查询结果集设计了八大封装的结果集对象
	 	用于封装不同的sql语句得到的不同结果!!!
	 	常用的结果集对象,只需要记住三个:
	 		BeanHandler,将查询结果集中的第一条记录封装到指定的JavaBean中
	 			sql语句中的查询条件只能获取到唯一的一条记录时,使用此结果集对象!
	 		BeanListHandler,将查询结果集中的每一条记录都封装成JavaBean,并将这些JavaBean对象放入List集合中
	 		ScalarHandler,专门用于封装聚合函数得到的结果,也就是查询的结果为单一的数据
	 */
	/*
	 	Student.class,学生类的对象,传入到BeanHandler()结果集的构造方法中,做了哪些事情???
	 	1、找到了Student类中的无参构造方法,创建了学生对象
	 	2、找到了对应属性的setter方法,完成了属性的赋值,为了能够保证赋值成功,属性名必须与表中的字段名一致!!!
	 */
	Student student = qRunner.query(connection, "select * from student where sid = 4",
			new BeanHandler<Student>(Student.class));
	System.out.println(student);
	List<Student> stus = qRunner.query(connection, "select * from student", 
			new BeanListHandler<Student>(Student.class));
	for (Student stu : stus) {
		System.out.println(stu);
	}
	/*
	Object count = qRunner.query(connection, "select count(*) from student", 
			new ScalarHandler());
	System.out.println(count);*/
	DbUtils.close(connection);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值