JDBC操作数据库工具类(使用阿里Druid原生API创建数据源)
1.数据库配置类
package com.zdlt.auth.api.common.druid; import java.util.Properties; import static com.alibaba.druid.pool.DruidDataSourceFactory.*; /**
* 数据库配置类
*
* @author shiyanjun
* @since 2019-12-15
*/
public class DbConfig {
/**
* 获取数据库配置
*
* @return 配置信息
*/
public static Properties getDbConfig() {
Properties properties = new Properties();
properties.put(PROP_URL, "jdbc:mysql://localhost:3306/authapi");
properties.put(PROP_USERNAME, "root");
properties.put(PROP_PASSWORD, "123456");
properties.put(PROP_INITIALSIZE, "5");
properties.put(PROP_MINIDLE, "5");
properties.put(PROP_MAXACTIVE, "10");
properties.put(PROP_MAXWAIT, "10000");
return properties;
}
}
2.数据库操作工具类
package com.zdlt.auth.api.common.druid; import lombok.extern.slf4j.Slf4j; import javax.sql.DataSource;
import java.sql.*;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map; /**
* 数据库操作工具类
*
* @author shiyanjun
* @since 2019-12-15
*/
@Slf4j
public class DbUtil {
/**
* 获取数据库连接
*
* @param dataSource 数据源
* @return 连接
* @throws SQLException
*/
public static Connection getConnection(DataSource dataSource) throws SQLException {
return dataSource.getConnection();
} /**
* 获取模型项实例数据源
*
* @return 数据源
* @throws Exception
*/
public static DataSource getDMInstanceDataSource() {
return DMInstanceDb.INSTANCE.getDataSource();
} /**
* 执行查询SQL语句
*
* @param dataSource 数据源
* @param querySql 查询SQL语句
* @return 查询结果
*/
public static List<Map<String, Object>> executeQuery(DataSource dataSource, String querySql) {
if (dataSource == null) {
throw new RuntimeException("DataSource not be null!");
}
if (querySql == null || querySql.trim().length() == 0) {
throw new RuntimeException("Query SQL not be empty!");
}
List<Map<String, Object>> resultList = new ArrayList<>();
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = DbUtil.getConnection(dataSource);
statement = connection.createStatement();
resultSet = statement.executeQuery(querySql);
ResultSetMetaData metaData = resultSet.getMetaData();
resultList = getResultMap(resultSet, metaData);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtil.closeResource(resultSet, statement, connection);
}
return resultList;
} /**
* 解析结果集
*
* @param rs 结果集
* @param md 结果集元数据
* @return 表数据
* @throws SQLException
*/
private static List<Map<String, Object>> getResultMap(ResultSet rs, ResultSetMetaData md) throws SQLException {
List<Map<String, Object>> resultList = new ArrayList<>();
int columnCount = md.getColumnCount();
while (rs.next()) {
Map<String, Object> resultMap = new LinkedHashMap<>();
for (int i = 1; i <= columnCount; i++) {
String columnName = md.getColumnLabel(i);
Object columnVal = getType(rs, md, columnName, i);
resultMap.put(columnName, columnVal);
}
resultList.add(resultMap);
}
return resultList;
} /**
* 根据字段名称和字段类型获取字段的值
*
* @param rs 结果集
* @param md 结果集元数据
* @param columnName 字段名称
* @param index 字段序号
* @return 字段的值
* @throws SQLException
*/
private static Object getType(ResultSet rs, ResultSetMetaData md,
String columnName, int index) throws SQLException {
int columnType = md.getColumnType(index);
switch (columnType) {
case Types.ARRAY:
return rs.getArray(columnName);
case Types.BIGINT:
return rs.getInt(columnName);
case Types.BOOLEAN:
return rs.getBoolean(columnName);
case Types.BLOB:
return rs.getBlob(columnName);
case Types.DOUBLE:
return rs.getDouble(columnName);
case Types.FLOAT:
return rs.getFloat(columnName);
case Types.INTEGER:
return rs.getInt(columnName);
case Types.NVARCHAR:
return rs.getNString(columnName);
case Types.VARCHAR:
return rs.getString(columnName);
case Types.TINYINT:
return rs.getInt(columnName);
case Types.SMALLINT:
return rs.getInt(columnName);
case Types.DATE:
return rs.getDate(columnName);
case Types.TIMESTAMP:
return rs.getTimestamp(columnName);
default:
return rs.getObject(columnName);
}
} /**
* 关闭资源
*
* @param statement 语句执行器
* @param connection 连接
*/
public static void closeResource(Statement statement, Connection connection) {
closeStatement(statement);
closeConnection(connection);
} /**
* 关闭资源
*
* @param resultSet 结果集
* @param statement 语句执行器
* @param connection 连接
*/
public static void closeResource(ResultSet resultSet, Statement statement, Connection connection) {
closeResultSet(resultSet);
closeStatement(statement);
closeConnection(connection);
} /**
* 关闭结果集
*
* @param resultSet 结果集
*/
public static void closeResultSet(ResultSet resultSet) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} /**
* 关闭语句执行器
*
* @param statement 语句执行器
*/
public static void closeStatement(Statement statement) {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} /**
* 关闭连接
*
* @param connection 连接
*/
public static void closeConnection(Connection connection) {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
3.数据库业务枚举单例
package com.zdlt.auth.api.common.druid; import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.fastjson.JSON; import javax.sql.DataSource;
import java.util.List;
import java.util.Map; /**
* 模型实例数据库枚举
*
* @author shiyanjun
* @since 2019-12-15
*/
public enum DMInstanceDb {
INSTANCE; // 模型项实例数据源
private static DataSource dataSource; static {
if (dataSource == null) {
try {
dataSource = DruidDataSourceFactory.createDataSource(DbConfig.getDbConfig());
} catch (Exception e) {
e.printStackTrace();
}
}
} /**
* 获取数据源
*
* @return
*/
public DataSource getDataSource() {
return dataSource;
} /**
* 测试
*
* @param args
*/
public static void main(String[] args) {
String sql = "select * from system_dict";
// 使用枚举单例对象DMInstanceDb.INSTANCE获取数据源
DataSource dataSource = DMInstanceDb.INSTANCE.getDataSource();
List<Map<String, Object>> mapList = DbUtil.executeQuery(dataSource, sql);
System.out.println(JSON.toJSONString(mapList));
}
}
JDBC操作数据库工具类(使用阿里Druid原生API创建数据源)的更多相关文章
- Java基础之原生JDBC操作数据库
前言 日常开发中,我们都习惯了使用ORM框架来帮我们操作数据库,本文复习.记录Java如何使用原生JDBC操作数据库 代码编写 封装几个简单方法 find查询方法 findOne查询方法 update ...
- 用于JDBC操作数据库的公共类
/* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...
- DbUtils是Apache出品一款简化JDBC开发的工具类
DbUtils - DbUtils是Apache出品一款简化JDBC开发的工具类 - 使用DbUtils可以让我们JDBC的开发更加简单 - DbUtils的使用: ...
- JDBC操作数据库的学习(2)
在上一篇博客<JDBC操作数据库的学习(1)>中通过对例1,我们已经学习了一个Java应用如何在程序中通过JDBC操作数据库的步骤流程,当然我们也说过这样的例子是无法在实际开发中使用的,本 ...
- JDBC操作数据库的三种方式比较
JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL. ...
- JDBC操作数据库实例
jdbc操作数据库实例 1.jdbc创建数据库 1.1 前提条件 1.拥有创建和删除表的权限 2.数据库已经启动,且可用 1.2 jdbc创建数据库表的步骤: 导包:导入需要进行数据库编程的 JDBC ...
- MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...
- JDBC操作数据库的学习(1)
单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...
- Spring入门(十五):使用Spring JDBC操作数据库
在本系列的之前博客中,我们从没有讲解过操作数据库的方法,但是在实际的工作中,几乎所有的系统都离不开数据的持久化,所以掌握操作数据库的使用方法就非常重要. 在Spring中,操作数据库有很多种方法,我们 ...
随机推荐
- Java开发环境之Git
查看更多Java开发环境配置,请点击<Java开发环境配置大全> 拾叁章:Git安装教程 1)去官网下载Git安装包 https://gitforwindows.org/ 2)安装 双击执 ...
- CC2530调试过程中遇到的问题们
应用场景描述: 多个发送端在不同的信道上发送信息(11~26)信道,接收端轮询所有信道(11~26),若有信号,则接收,若无信号则继续轮询.形成多个点对点的收发系统. 一.问题1 Ø 问题现象描述: ...
- 使用kubeadm安装Kubernetes 1.15.3 并开启 ipvs
一.安装前准备 机器列表 主机名 IP node-1(master) 1.1.1.101 node-2(node) 1.1.1.102 node-3(node) 1.1.1.103 设置时区 cp / ...
- ztree的添加、修改、删除及前后台交互
一.引入资源下载并引入ztree的相关js,css和img等.http://www.treejs.cn/v3/api.php ztree的核心代码jquery.ztree.core.jsztree关于 ...
- 初步学习JAVA面向对象初步认识及面向对象内存分析图举例说明
1. 说到面向对象, 一个绕不开的话题,就是面向过程. 面向过程适合简单.不需要协作的事务. 面向过程 = 分解问题 + 逻辑为先 = 先细节,再整体. 对比面向过程, 面向对象是模块化的, 当我们思 ...
- scrum-master个人实践回顾总结
个人回顾总结 一.开课提出问题 第一次博客地址:https://www.cnblogs.com/Slow-Walker/p/11513179.html 二.问题回答 2.1问题1:针对单元测试 怎么保 ...
- SpringBoot项目的测试类
1. package soundsystem; import static org.junit.Assert.*; import org.junit.Test; import org.junit.ru ...
- 201671030118 索郎卓玛 实验十四 团队项目评审&课程学习总结
项目 内容 作业课程地址 任课教师首页链接 作业要求 团队项目评审&课程学习总结 课程学习目标 项目的验收以及课程的学习进行总结与反思 一 对<实验一 软件工程准备>的任务提出的问 ...
- spark读写Oracle、hive的艰辛之路(二)-Oracle的date类型
近期又有需求为:导入Oracle的表到hive库中: 关于spark读取Oracle到hive有以下两点需要说明: 1.数据量较小时,可以直接使用spark.read.jdbc(orclUrl,tab ...
- hive表分区相关操作
Hive 表分区 Hive表的分区就是一个目录,分区字段不和表的字段重复 创建分区表: create table tb_partition(id string, name string) PARTIT ...