HikariCP 简单使用

时间 2018/6/19 21:03:38 加载中...

HikariCP

号称性能最好的JDBC连接池

其Github地址是:https://github.com/brettwooldridge/HikariCP

我们来看如何使用 HikariCP来访问 MySQL 数据库 


使用 HikariCP 访问 MySQL


新建一个 Maven 项目,并引入所需的依赖:

<dependency>
	<groupId>com.zaxxer</groupId>
	<artifactId>HikariCP</artifactId>
	<version>3.1.0</version><!--$NO-MVN-MAN-VER$-->
</dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple 这个是为了实现slf4j的 -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-simple</artifactId>
	<version>1.7.25</version>
</dependency>

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.39</version>
</dependency>

注意:mysql-connector-java 的版本不要过高,否则可能会出现 

java.sql.SQLException: No suitable

ERROR com.zaxxer.hikari.HikariConfig - Failed to load driver class

问题。


我们引入了三个依赖:

HikariCP JDBC连接池

slf4j-simple 日志库

mysql-connector-java mysql的连接驱动


简单的新增


我们在main函数中先执行一个简单的新增。


private static HikariDataSource getDataSource() throws SQLException {

	HikariConfig config = new HikariConfig();

	config.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/javablog?useUnicode=true&characterEncoding=utf8&useSSL=false");
	config.setUsername("root");
	config.setPassword("123456");
	config.addDataSourceProperty("cachePrepStmts", "true");
	config.addDataSourceProperty("prepStmtCacheSize", "250");
	config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");

	return new HikariDataSource(config);
}

/* 简单的新增 */
public static int Add_Demo() {
	int result = -1;
	try {
		HikariDataSource dataSource = getDataSource();
		Connection connection = dataSource.getConnection();

		Statement statement = connection.createStatement();
		
		statement.execute("insert user values(NULL,'9','9',1);", Statement.RETURN_GENERATED_KEYS);
		ResultSet resultSet = statement.getGeneratedKeys();
		if (resultSet != null) {
			if (resultSet.next()) {
				result = resultSet.getInt(1);
			}
		}
				
		if (connection != null && !connection.isClosed())
			connection.close();
		if (dataSource != null && !dataSource.isClosed())
			dataSource.close();
		
	} catch (Exception e) {
		e.printStackTrace();
	}
	return result;
}


首先是新建一个 HikariConfig 的配置类,根据此配置类生成一个 HikariDataSource 数据源,由 数据源 来生成一个 连接 Connection。

Connection 再创建一个 Statement,由 Statement 来执行的 sql 语句。这个新增同时还返回了新增后的主键值,方法是通过 getGeneratedKeys 方法。


简单的更新


/* 更新 */
public static int update_dmeo() {
	int result = -1;
	try {

		HikariDataSource dataSource = getDataSource();
		Connection connection = dataSource.getConnection();

		Statement statement = connection.createStatement();
		result = statement.executeUpdate("update user set username = 'changed' where userid = 4");

		if (connection != null && !connection.isClosed())
			connection.close();
		if (dataSource != null && !dataSource.isClosed())
			dataSource.close();
					
	} catch (Exception e) {
		e.printStackTrace();
	}
	return result;
}


更新方法和新增方法基本相同,只是 SQL 语句不同而已。返回的结果是受影响的行数。


简单的查询


public static ResultSet simpleQuery(String sql) {
	try {
		HikariDataSource dataSource = getDataSource();
		Connection connection = dataSource.getConnection();

		Statement statement = connection.createStatement();
		ResultSet resultSet = statement.executeQuery(sql);
		
		if (connection != null && !connection.isClosed())
			connection.close();
		if (dataSource != null && !dataSource.isClosed())
			dataSource.close();
		
		return resultSet;

	} catch (Exception e) {
		e.printStackTrace();
	}
	
	return null;
}


通过执行一条 SQL 语句来获取一个数据集合,使用的方法是 executeQuery 方法,返回的结果是一个 ResultSet 。

我们可以打印这个 ResultSet 。


public static void printResultSet(ResultSet resultSet) throws SQLException {
	if (resultSet != null) {
		ResultSetMetaData md = resultSet.getMetaData();// 获取键名
		int columnCount = md.getColumnCount();// 获取行的数量

		while (resultSet.next()) {
			StringBuilder builder = new StringBuilder();

			for (int i = 1; i <= columnCount; i++) {
				String colName = md.getColumnName(i);
				Object val = resultSet.getObject(i);

				builder.append(MessageFormat.format("{0}:{1}", colName, val));
			}

			print(builder.toString());
		}
	}
}

public static void print(Object obj) {
	System.out.println(obj);
}


至此,HikariCP简单的数据访问完成。



扫码分享
版权说明
作者:SQBER
文章来源:http://blog.sqber.com/articles/HikariCP-Simple-Demo.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。