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. 假设检验、T检验

    假设检验初步: https://cosx.org/2010/11/hypotheses-testing t检验:https://mangowu97.github.io/%E5%82%BB%E7%93% ...

  2. 【爬虫】随机获取UA

    使用模块  fake-useragent https://github.com/hellysmile/fake-useragent 1.安装模块 2.配置 # settings.py '''下载器中间 ...

  3. 类型转换的时候,.valueOf()和.parseX(),.Xvalue()的区别

    .valueOf()返回的是包装类(Wrapper Class)中的一些类型:而.parseX()返回的是基本数据类型,如int,char,double等.其参数应该是String类型. .Xvalu ...

  4. PAT 乙级 1011.A+B 和 C C++/Java

    题目来源 给定区间 [−] 内的 3 个整数 A.B 和 C,请判断 A+B 是否大于 C. 输入格式: 输入第 1 行给出正整数 T (≤),是测试用例的个数.随后给出 T 组测试用例,每组占一行, ...

  5. 逆向破解之160个CrackMe —— 019

    CrackMe —— 019 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序 CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 c ...

  6. php的选择排序

    往前. <?php /** * 选择排序 * 工作原理是每次从待排序的元素中的第一个元素设置为最小值, * 遍历每一个没有排序过的元素,如果元素小于现在的最小值, * 就将这个元素设置成为最小值 ...

  7. Linux的sz和rz命令

    工作中需要在Linux和Windows之间传输文件时,一般使用winscp或者ftp工具来完成,最近才知道有sz和rz这两个命令,方便好用. sz  下载 从Linux下载文件到本机 , 在Linux ...

  8. POJ 3322 Bloxorz

    #include<cstring> #include<algorithm> #include<iostream> #include<cstdio> #i ...

  9. Collections.synchronizedList使用

    1.SynchronizedList类具体代码: static class SynchronizedList<E> extends SynchronizedCollection<E& ...

  10. VisualVM的插件中心已经迁移至GitHub

    VisualVM是一款免费的集成了多个JDK命令行工具的可视化性能分析工具,而且目前已经被JDK包含了,取名为:jvisualvm .如果你是一名Javaer,强烈建议你能够使用它,因为它不仅能生成和 ...