我们为什么需要数据库连接池?
使用数据库连接池的意义在于,在使用JDBC时,当需要创建一个数据库连接对象(Connection)的时候,会正常创建一个连接对象,在连接关闭的时候,这个连接也就被关闭了,也就是说每一个连接都是一次性的,非常的不环保(bushi,而且每次连接数据库都需要创建一个新的连接,就非常的占用时间,所以,数据库连接池的意义就在于使连接对象。可以被提前创建并复用,节省了每次连接都创建一个新的连接的时间,并节约了资源。
具体实现:
package Semester_3.src.useJDBC;
import com.alibaba.druid.pool.DruidDataSourceFactory;
//一堆的导入文件
import javax.sql.DataSource;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
public class useDruid {
public static void main(String[] args) throws Exception {
// 调用方法
selectAll();
upData();
}
public static void selectAll() throws Exception{
// 该方法用来查询所有的数据
// Properties是用来给数据库连接池提供配置文件的文件,此类文件的特性是像Map集合一样一个键对应一个值
Properties p = new Properties();
// 创建一个Properties对象并通过load方法将配置文件通过文件输入流的方式封装进对象中
p.load(Files.newInputStream(Paths.get("Java/src/Semester_3/src/useJDBC/config.properties")));
// DataSource是Java定义的一个接口,Druid通过数据库工厂类的静态方法createDataSource并传入配置文件来获取这个接口的具体实现类
// 这一段代码的意义在于声明是由Druid实现的具体的接口,如果更换数据库连接池就需要更换实现这个接口的具体实现类
DataSource source = DruidDataSourceFactory.createDataSource(p);
// 通过source也就是数据源的接口实例对象就可以调用数据库连接对象
Connection connection = source.getConnection();
// 通过数据库连接对象就可以获取到将SQL语句发送到数据库的发送类
Statement statement = connection.createStatement();
// 然后定义一个sql语句
String sql = "select * from course";
// 通过SQL发送对象的executeQuery方法传入定义好的sql语句的方式就可以执行SQL语句并获取返回值
// 此处的方法是executeQuery()是用来执行查询语句的,如果需要执行增删改的语句需要调用executeUpdate()方法
// 返回的是一个ResultSet集合,里面封装了所有查询到的数据
ResultSet set = statement.executeQuery(sql);
// 遍历ResultSet集合,使用next()方法判断内部是否有数据,next()就像是一个游标,会一行一行的判断是否为有效行
// 有效行的意思就是这一行内是否有数据,如果有数据就是有效行,会在获取这一行数据的同时返回一个true,并继续向下一行走;如果没有数据就是无效行,会返回一个false结束循环
while (set.next()){
// ResultSet的获取数据的方法是getXxx(int columnIndex)方法,这个方法中的Xxx表示获取的数据类型,比如要获取String类型的方法就是getString()方法
// 当参数为Int类型的时候就是表示获取第几列,如果参数为String类型表示要获取的列名
String c_no = set.getString(1);
String c_name = set.getString(2);
int hours = set.getInt(3);
int credit = set.getInt(4);
String type = set.getString(5);
// 最后将得到的数据输出出来或者进行其他的逻辑操作即可
System.out.println(c_no+"\t"+c_name+"\t"+hours+"\t"+credit+"\t"+type);
// 这是一个循环,每次循环获取的都是一行数据,直到最后一行输出完毕循环才会停止
}
}
public static void upData() throws Exception{
// 这是一个修改列中数据的方法,修改和查找的方法相比仅是SQL发送类调用的方法不同
Properties p = new Properties();
p.load(Files.newInputStream(Paths.get("Java/src/Semester_3/src/useJDBC/config.properties")));
DataSource source = DruidDataSourceFactory.createDataSource(p);
Connection connection = source.getConnection();
Statement statement = connection.createStatement();
String sql = "update course set type = '必修' where c_no > 1";
// 在查找的时候使用executeQuery(sql),在增删改的时候使用executeUpdate(sql)
// 该方法的返回值是一个int类型的数字,表示被影响的列,一般可以认为如果返回的值大于零就是执行成功
// 但是有一些sql语句在执行的时候返回值是0但是也执行成功了
// 比如有一些数据库或者数据表的创建和删除语句的返回值一般都是0,但是也可以执行成功,所以更多认为不报错就是运行成功
int update = statement.executeUpdate(sql);
if(update >=0 ){
System.out.println("修改成功!");
}
}
}
注意点:
使用数据库连接池的时候需要将连接数据库的基本数据放在一个配置文件中,配置文件是一个prpperties文件,是一个专门用来存放键值对的文件:
这只是最基本的配置,更多的配置可以查阅Druid的官方网站