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);
}