package com.rehome.mqttclienttemperature.utils; import com.alibaba.druid.pool.DruidPooledConnection; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.rehome.mqttclienttemperature.datasource.DataSource; import com.rehome.mqttclienttemperature.dto.ResponseDto; import lombok.extern.slf4j.Slf4j; import java.sql.*; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; @Slf4j public class JdbcUtil { /** * 执行sql并返回结果 * * @param datasource 数据源连接 * @param sql 语句 */ public static ResponseDto executeSql(DataSource datasource, String sql) { return executeSql(datasource,sql,new ArrayList()); } /** * 执行sql并返回结果 * * @param datasource 数据源连接 * @param sql 语句 * @param jdbcParamValues */ public static ResponseDto executeSql(DataSource datasource, String sql, List jdbcParamValues) { log.info(sql); log.info(JSON.toJSONString(jdbcParamValues)); DruidPooledConnection connection = null; try { connection = PoolManager.getPooledConnection(datasource); PreparedStatement statement = connection.prepareStatement(sql); for (int i = 1; i <= jdbcParamValues.size(); i++) { statement.setObject(i, jdbcParamValues.get(i - 1)); } boolean hasResultSet = statement.execute(); if (hasResultSet) { ResultSet rs = statement.getResultSet(); int columnCount = rs.getMetaData().getColumnCount(); List columns = new ArrayList<>(); for (int i = 1; i <= columnCount; i++) { String columnName = rs.getMetaData().getColumnLabel(i); columns.add(columnName); } List list = new ArrayList<>(); while (rs.next()) { JSONObject jo = new JSONObject(); columns.stream().forEach(t -> { try { if(t.equals("create_date")){ Timestamp timestamp = rs.getTimestamp("create_date"); Date date = new Date(timestamp.getTime()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); jo.put(t, sdf.format(date)); }else{ Object value = rs.getObject(t); jo.put(t, value); } } catch (SQLException e) { e.printStackTrace(); } }); list.add(jo); } return ResponseDto.apiSuccess(list); } else { int updateCount = statement.getUpdateCount(); return ResponseDto.apiSuccess("sql修改数据行数:" + updateCount); } } catch (Exception e) { e.printStackTrace(); return ResponseDto.fail(e.getMessage()); } finally { try { if (connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }