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创建数据源)的更多相关文章

  1. Java基础之原生JDBC操作数据库

    前言 日常开发中,我们都习惯了使用ORM框架来帮我们操作数据库,本文复习.记录Java如何使用原生JDBC操作数据库 代码编写 封装几个简单方法 find查询方法 findOne查询方法 update ...

  2. 用于JDBC操作数据库的公共类

    /* * @(#)CommonSql.java 2011-9-5 * * Copyright 2011 Bianjing,All rights reserved. */ import java.sql ...

  3. DbUtils是Apache出品一款简化JDBC开发的工具类

    DbUtils     - DbUtils是Apache出品一款简化JDBC开发的工具类     - 使用DbUtils可以让我们JDBC的开发更加简单     - DbUtils的使用:       ...

  4. JDBC操作数据库的学习(2)

    在上一篇博客<JDBC操作数据库的学习(1)>中通过对例1,我们已经学习了一个Java应用如何在程序中通过JDBC操作数据库的步骤流程,当然我们也说过这样的例子是无法在实际开发中使用的,本 ...

  5. JDBC操作数据库的三种方式比较

    JDBC(java Database Connectivity)java数据库连接,是一种用于执行上sql语句的javaAPI,可以为多种关系型数据库提供统一访问接口.我们项目中经常用到的MySQL. ...

  6. JDBC操作数据库实例

    jdbc操作数据库实例 1.jdbc创建数据库 1.1 前提条件 1.拥有创建和删除表的权限 2.数据库已经启动,且可用 1.2 jdbc创建数据库表的步骤: 导包:导入需要进行数据库编程的 JDBC ...

  7. MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)

    MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...

  8. JDBC操作数据库的学习(1)

    单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...

  9. Spring入门(十五):使用Spring JDBC操作数据库

    在本系列的之前博客中,我们从没有讲解过操作数据库的方法,但是在实际的工作中,几乎所有的系统都离不开数据的持久化,所以掌握操作数据库的使用方法就非常重要. 在Spring中,操作数据库有很多种方法,我们 ...

随机推荐

  1. Redis支持的数据类型

    String字符串: 格式: set key value string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象 . string类型是Redi ...

  2. Haproxy 让后端RS记录真实IP

    一.修改haproxy.cfg配置文件,在defaults中加入如下两行,并重启haproxy. vim /etc/haproxy/haproxy.cfg defaults option http-s ...

  3. Spring搬迁

      Spring简介 加载bean流程 Bean的生命周期 双亲委派 自定义类加载器 Spring事务 异步Async Spring设计模式 Spring单例 SpringMVC流程   备注:app ...

  4. MySQL 练习题目 二刷 - 2019-11-4 5:55 am

    建表的过程 create table student( sid int not null primary key, sname ) not null, sborn date, ssex ) not n ...

  5. kuma 学习二 centos 安装

    前边有使用minikube运行kuma,以下是在centos 上安装使用 环境准备 下载软件包 wget https://kong.bintray.com/kuma/kuma-0.1.1-centos ...

  6. 洛谷P2068 统计和题解

    题目描述 给定一个长度为n(n<=100000),初始值都为0的序列,x(x<=10000)次的修改某些位置上的数字,每次加上一个数,然后提出y (y<=10000)个问题,求每段区 ...

  7. 在itop4412移植linux4.14和设备树遇到的问题及解决

    Linux4.14的设备树下已经对itop4412做了支持,本来应该很容易进行移植,可是在使用讯为给的资料中,对exynos4412-itop-scp-core.dtsi中原本的代码全部进行了注释,并 ...

  8. linux高性能服务器编程 (五) --Linux网络编程基础api

    第五章 Linux网络编程基础api 1.主机字节序和网络字节序 字节序是指整数在内存中保存的顺序.字节序分为大端字节序.小端字节序. 大端字节序:一个整数的高位字节数据存放在内存的低地址处.低位字节 ...

  9. 重置GPU显存 Reset GPU memory after CUDA errors

    Sometimes CUDA program crashed during execution, before memory was flushed. As a result, device memo ...

  10. 小程序组件--> 组件传参

    小程序组件,在components文件夹右击-->创建文件夹-->右击-->新建component即可 创建一个组件 如果多个地方需要使用到,可以在app.json中加入一下代码,相 ...