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中,操作数据库有很多种方法,我们 ...
随机推荐
- Django 之 restframework 解析器源码分析
解析器分类: 1. JSONPaser ----> 解析 JSON-serialized data (解析JSON序列化的数据) 2.FormParser ---->解析form 表单中 ...
- CentOS6.7安装部署之Tomcat多实例
Tomcat单机多实例配置 操作前的准备:关闭防火墙,配置好IP地址,安装好JAVA环境 1.首先创建tomcat所有实例共同的工作目录/data/webapps以及tomcat所有实例的所在目录/d ...
- Intel重大漏洞之Meltdown和Spectre
史上最大漏洞危机:影响所有 iPhone.Android.PC 设备,修复困难重重 近日,英特尔的日子可并不好过. 作为全球知名芯片制造商,任何有关英特尔芯片漏洞的问题都会导致全球上百万设备遭受牵连. ...
- (一)Kubernetes 系统基础
Kubernetes介绍 什么是Kubernetes? Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能. 使用Kubernetes可以: ...
- P1850 换教室[dp+期望]
流下了不会概率的眼泪,由于不会概率,转移少写了点东西... 这个dp很简单,就是一个普通的线性dp加点期望.(刚开始写这道题时信笔写下) \(dp[0/1][i][j]\)表示到第\(i\)个时间段时 ...
- 13、Python文件处理、os模块、json/pickle序列化模块
一.字符编码 Python3中字符串默认为Unicode编码. str类型的数据可以编码成其他字符编码的格式,编码的结果为bytes类型. # coding:gbk x = '上' # 当程序执行时, ...
- RemoveError: 'setuptools' is a dependency of conda and cannot be removed from conda's operating environment.
今天用conda install 任何包都会出现这个错误: RemoveError: 'setuptools' is a dependency of conda and cannot be remov ...
- Aizu2249-Road Construction-(Dijkstra)
https://vjudge.net/problem/Aizu-2249 题意:计划图中有n个城市m条路,首都是1号城市,要选一些路去修,让各个城市到首都的路径最短,在路径最短的情况下修路费用最小. ...
- JS实现继承的几种方法
父类: // 定义一个动物的类 function Animal (name) { // 属性 this.name = name || 'Animal'; // 实例方法 this.sleep = fu ...
- PHP - Filters
Retrieve the administrator password of this application. 对文件包含的介绍------------第一个链接需要谷歌 https://mediu ...