您的位置:首页 > 运维架构 > Apache

使用Apache第三方jar包来访问数据库以及创建数据库连接池

2018-03-23 21:29 513 查看
在使用apache的第三方来处理结果集时,我们需要有一些准备工作:

1.首先下载并导入sun公司的mysql-connector-java-5.1.37-bin.jar包,该包主要作用是注册连入mysql数据库的驱动,然后获得数据库的连接connection

2.然后下载并导入Apache公司的jar包:commons-dbutils-1.6.jar,该jar包中我们主要是利用jar包中的方法来处理数据库返回的结果集

我们使用dbutil的jar包中的三个类:

①用QueryRunner类来处理结果集,QueryRunner方法中的方法都是对象方法

②用DbUtil类来关闭资源,DbUtil类中封装了几个关闭资源的方法,并且内部已经处理了异常

③ResultSetHandler接口:根据不同的返回数据来用接口的不同实现类来处理数据

例如:查询数据库school中的student表格中的数据

QueryRunner qRunner = new QueryRunner();
Class.forName("com.mysql.jdbc.Driver");//注册驱动
//连接数据库
Connection connetion =  DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","123456");


QueryRunner类对象在连接数据库时,根据不同的sql指令,有不同的方法;

① 当对数据库的操作是insert into ,update,delete的时候:

String sql = "update student set sname = ?,id = ?,gender = ?"
//第一个参数connection就是和数据库建立连接获得的连接类
//第二个sql就是要执行的sql语句
//第三,第四和第五个分别对应着sql语句中的?,这样是为了防止sql注入,改变了sql语句原本的指令
in row = qRunner.update(connection,sql,"hehe",1,"nan");//返回值表示的是受sql指令影响的数据的行数
//sql语句中的参数也可以封装到一个数组中
Object[] array = {"hehe",2,"nan"};
qRunner.update(connection,sql,array);//这种方式也是可以防止sql注入,改变mysql原本的指令


②  当对数据库中的数据做查询操作的时候


String sql = "select * from student";
qRunner.Query(connection,sql,ResultSetHandler接口实现类的一个对象);


ResultSetHandler接口的实现类有很多,根据我们队结果处理的方法不同可以分为八类:
①结果集第一种处理方法:ArrayHandler:将查询出来的数据中的第一行数据放到一个对象数组中并返回


Object[] res= qRunner.Query(connection,sql,new ArrayHandle());//返回值是一个数组


②结果集第二种处理方法:ArrayListHandler:查询数据库中的每一条数据,全部放到list集合中,每一条数据都是一个对象数组


List<Object[]>list = qRunner.Query(connection,sql,new ArrayListHandler());//返回值是一个集合


③结果集第三种处理方法:BeanHandler:将结果集的第一行封装成一个JavaBean对象
javaBean对象是指自定义对象中要满足:①成员变量全部私有化②提供成员变量的set/get方法③提供空参构造方法


//首先要创建一个自定义对象student,要复合javaBean规范
Student student = qRunner.Query(connection,sql,new BeanHandle<Student>(Student.class));//这样就把第一行的数据全部装到一个student对象中了


④结果集第四种处理方法:BeanListHandler:将结果集中每一行数据封装成JavaBean对象,然后将所有对象存放在集合中


List<student> list = qRunner.Query(connection,sql,new BeanList<Student>(Student.class));//集合的泛型就是student,返回的集合就是所有的数据


⑤结果集第五种处理方法:ColumnListHandler:返回指定的列的那一整列对应的数据


//⚠️⚠️⚠️这里我们需要注意一下:我们要查询的那一列一定要在sql语法返回的结果集中存在,如果我们查询的字段名在mysql语句中没有,则查询不到
List list = qRunner.Query(connection,sql,new ColumnListHander<>("字段名"));
//⚠️⚠️⚠️这里我们需要注意一下:这里面下角标只的是要查的字段在sql语句查的一组字段中的下角标
List list = qRunner.Query(connection,sql,new ColumnListHandler<>(下角标));


⑥结果集第六种处理方法:ScalarHandler:对于查询结果只有一个的时候,可以使用ScalarHandler,例如求数据库聚合函数count,avg,sum,min.max


qRunner.Query(connection,sql,new ScalarHandler(返回值的数据类型));//只有一个返回值


⑦结果集第七种处理方法:MapHandler:将结果集的第一行数据已键值对的形式存储到map集合中


Map map = qRunner.Query(connection,sql,new MapHandler());//返回值是一个map集合
//对map进行遍历就可以获得数据了
for(String key: map.keySet)
{
System.out.println(map.get(key));
}


⑧结果集第八种处理方法:MapListHandler:将结果集的每一行数据已键值对的形式存储到map集合中,再讲所有的map集合装到一个list集合中


List<Map> list = qRunner.Query(connection,sql,new MapListHandler<>());
//对集合遍历
for(Map map:list)
{
for(String key:map.keySet)
{
System.out.println(map.get(key));
}
}


数据库连接池

因为我们在连接数据库和删除资源的时候是特别消耗内存的,为了提高系统的运行效率,这时候我们可以创建一个数据库连接池

数据库连接池可以这样理解:连接池中有多条处于闲置状态的connection,当有程序要连接数据库的时候,就与连接池中的一个connection连接,当不连接的时候connection就再放回数据库连接池中

数据库连接池规范:DataSource(接口)

由数据库厂商来提供数据库连接池接口的实现类,常用的数据库连接池有两种:DBCP C3P0;

虽然第三方的接口实现类中封装了数据库的连接方法,但是在创建数据库连接池的时候,我们需要做一些设置:

①设置注册连接的数据库的驱动

②设置连接数据库的链接地址,数据库的用户名和登录密码

还有一些扩展的设置:

①设置数据库连接池的初始连接数

②设置数据库最大能同时连接的条数

③设置数据库中最大的闲置的连接条数,多余的条数关闭掉

④设置数据库中最小的闲置的连接条数,如果不够就创建新的连接

下面来实现以下数据库连接池的创建

BasicDataSource source = new BasicDataSource();
//基础设置:
source.setDriverClassName("cpom.mysql.jdbc.Driver");
source.setUrl("jdbc:mysql://localhost:3306/student");
source.setUserName("root");
source.setPassword("123456");
//扩展设置
//初始连接数有10个
source.setInitialSize(10);
//最大同时连入5条
source.setMaxActive(6);
//最多处于闲置状态的连接数为6
source.setMaxIdle(6);
//最小处于闲置状态的连接数为6
source.setMinIdle(2);
//数据库连接池设置好了,下面我们开始连入数据库,并查询数据
QueryRunner runner = new QueryRunner(source);//直接连入连接池
String sql = "select * from student";
Student student = runner.Query(sql,new Beanhandler<Student>(Student.class));


当在创建QueryRunner类的对象的时候,连入连接池的时候,下面的操作就是用上面说到的8类对象来处理结果集
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐