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. golang测试

    简述 Go语言中自带有一个轻量级的测试框架testing和自带的go test命令来实现单元测试和性能测试. go test [-c] [-i] [build flags] [packages] [f ...

  2. 运维基础——Zabbix:Lack of free swap space on Zabbix server

    问题 使用Zabbix监控一些云主机时,可能遇到: Lack of free swap space on Zabbix server 使用命令: free -m 看到: Swap 的total,use ...

  3. 数据结构 - 顺序栈的实现 C++

    顺序栈封装 C++ 使用C++对顺序栈进行了简单的封装,实现了栈的基本操作 封装方法: pop(),top(),size(),empty(),push() 代码已经过测试 #pragma once # ...

  4. 《团队名称》第八次团队作业:Alpha冲刺day3

    项目 内容 这个作业属于哪个课程 2016计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十二 团队作业8-软件测试与ALPHA冲刺 团队名称 快活帮 作业学习目标 (1)掌握 ...

  5. 追光的人对Echo,SkyReach的Beta产品测试报告

    所属课程 软件工程1916 作业要求 Beta冲刺博客汇总 团队名称 追光的人 作业目标 团队互测 队员学号 队员博客 221600219 小墨 https://www.cnblogs.com/hen ...

  6. Discuz通过修改文章标题更好的实现SEO的方法

    找到: /source/module/forum/forum_viewthread.php 代码如下: $navtitle = get_title_page($_G['forum_thread'][' ...

  7. iOS 开发,相关网址

    iOS 开发,相关网址 说明 网址 注册开发者 https://developer.apple.com/cn/programs/enroll/ 未付费688个人开发账号真机调试测试教程 http:// ...

  8. 高性能MySQL(一)——索引

    一.mysql索引分类 单值索引:一个索引只包含单个列,一个表可以有多个单列索引 唯一索引:索引列的值必须唯一,但允许有空值 复合索引:一个索引包含多个列 基本语法: 创建:1.CREATE [UNI ...

  9. Linux内核Socket实现之------Socket创建(2) 文件描述符

    转载请注明:http://blog.chinaunix.net/uid-20788636-id-4408276.html 1.2 sock_map_fd函数 在用户空间创建了一个socket后,返回值 ...

  10. 网络命令——write、wall、ping、ifconfig、mail

    1.write命令: 前提:用户必须在线: (1)向zhb用户发送信息: (2)用户收到信息: CTRL+D结束会话. 2.wall(发送广播信息,即给在线的所有用户发送信息) 管理员发送消息(自己可 ...