失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java数据库连接JDBC和数据库连接池Druid

Java数据库连接JDBC和数据库连接池Druid

时间:2019-06-08 23:35:52

相关推荐

Java数据库连接JDBC和数据库连接池Druid

目录

数据库连接JDBC

数据库连接池Druid

数据库连接JDBC

JDBC是Java Data Base Connectivity的缩写即Java数据库连接,JDBC所要学习的东西,就是Java操作各种关系型数据库的一套API,其中Java定义好了接口,各个数据库厂商分别对这些接口进行了实现,如果我们要操作MySQL,那么就需要用MySQL家的实现类,也就是对应的jar,我们习惯性的说是MySQL驱动。该驱动可以通过该网址下载。

导入驱动jar包之后就可以可以操作对应的数据库了,该驱动jar包,提供了各种API。

我们创建一个DbUtil类,通过调用对应的API,来实现对数据库连接的操作。

import java.sql.Connection;import java.sql.DriverManager;public class DbUtil {private static String url = "jdbc:mysql://localhost:3306/newsblog?useSSL=false&serverTimezone=UTC";private static String user = "root";private static String password = "root";public static Connection getCon() {Connection con = null;try {Class.forName("com.mysql.cj.jdbc.Driver");// MySQL 8可以自动加载,这句可以省略con = DriverManager.getConnection(url, user, password);} catch (Exception e) {e.printStackTrace();}return con;}}

下面通过一个查询操作,来进行演示Java操作数据库的流程。

// 可以看出,这些接口都是Java官方定义好的,MySQL官方只是实现了这些接口import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;public class Demo1 {public static void main(String[] args) throws Exception {String sql = "select * from user where userId = 1";Connection con = DbUtil.getCon();Statement stmt = con.createStatement();ResultSet resultSet = stmt.executeQuery(sql);while (resultSet.next()) {System.out.println(resultSet.getString("userName"));}stmt.close();con.close();}}

到这里,我们就把Java操作数据库给跑起来了,上面用到了很多API,可能大家还不太熟悉,那么接下来,让我来进行介绍一些常用的API。

DriverManager类,这是一个类,是Java官方定义好的,在java.sql包下,该类的主要作用可以获取数据库连接,通过getConnection()方法。

Connection接口,这是数据库连接对象,可以理解为数据库连接之后会获得该对象。该对象主要是用来获取执行SQL的对象,另外还可以管理事务。这个接口提供了一些API

createStatement(),该方法是获取一个普通的执行SQL的对象。

prepareStatement(sql),该方法是获取一个预编译的执行SQL的对象(防止SQL注入)。

setAutoCommit(false),开启事务

commit(),提交事务

rollback(),回滚事务

Statement接口,主要是用来执行SQL语句的,该接口也提供了一些API

excuseUpdate(sql),用来执行数据定义语言DDL和数据增删改语言DML

excuseQuery(sql),用来执行数据查询语言DQL,该方法的返回值是一个结果集对象ResutSet

Result接口,这是查询语句的返回值的结果集对象。该结果集对象也提供了相应的API

next()方法,用来遍历该结果集,如果该方法的返回值是true,说明有数据,反之亦反之。

getXxx(参数),用来获取某一个结果的具体数据。

PreparedStatement接口,该接口继承Statement接口,可以解决SQL注入的问题。Statement执行SQL时,需要拼接字符串,所以有SQL的问题,但PreparedStatement,使用占位符来进行解决。然后通过setXxx()来进行对占位符进行设置值,这里给出一个查询案例。

public class Main {public static void main(String[] args) throws Exception {String sql = "select * from user where userId = ?";Class.forName("com.mysql.cj.jdbc.Driver");// MySQL 8可以自动加载,这句可以省略Connection con = DbUtil.getCon();PreparedStatement pstmt = con.prepareStatement(sql);pstmt.setInt(1, 1);// 占位符的下标从1开始,如果有多个,分别是1 2 3 ...ResultSet resultSet = pstmt.executeQuery();while (resultSet.next()) {System.out.println(resultSet.getString("userName"));}pstmt.close();con.close();}}

数据库连接池Druid

我们使用JDBC的时候,每次操作数据库,都要创建连接,操作完成之后又要释放连接,这样来回创建连接和释放连接比较耗费资源,所以提出一种技术,创建的连接放到一个池子里,每次操作数据库只需要在池子里拿就行了,用完再放到池子里,于是出现了数据库连接池。这里进行介绍Druid连接池。

Java官方对连接池也提供了接口DataSource,在javax.sql包下,该接口提供了一个getConnection()方法。Druid只是对这个接口进行了实现,还有像C3P0也是实现了该接口的规范。如果我们要使用Druid,首先我们需要先导入Druid的jar包,然后我们就可以使用了。

在使用Druid之前,我们需要写一个配置文件druid.properties,来进行配置数据库的用户名密码等。

driverClassName=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/newsblog?useSSL=false&serverTimezone=UTCcharacterEncoding=utf-8username=rootpassword=root#初始化物理连接的个数initialSize=5#最大连接池数量maxActive=10#获取连接时最大等待时间maxWait=3000

当我们把配置文件写好之后,就可以通过Druid数据库连接池来获取连接了,这里给出一个Demo

public class DruidUtil {public static Connection getCon() {Connection con = null;try {Properties prop = new Properties();prop.load(new FileInputStream("druid.properties"));DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);con = dataSource.getConnection();} catch (Exception e) {e.printStackTrace();}return con;}}

获取到连接之后,后面对数据库的操作和JDBC是一样的。

如果觉得《Java数据库连接JDBC和数据库连接池Druid》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。