package com.fr.plugin.utils; import com.fanruan.api.data.ConnectionKit; import com.fr.log.FineLoggerFactory; import com.fr.log.FineLoggerProvider; import java.math.BigDecimal; import java.sql.*; import java.util.*; public class DBUtils { String db_name = ""; private static FineLoggerProvider logger = FineLoggerFactory.getLogger(); public DBUtils() { this.db_name = "DJDB"; } public com.fr.data.impl.Connection getDbConnect() { return ConnectionKit.getConnection(db_name); } public List> select(String sql, Object... params) { logger.info("query data by sql:" + sql + Arrays.toString(params)); try { com.fr.data.impl.Connection dbConnect = getDbConnect(); Connection con = dbConnect.createConnection(); PreparedStatement preparedStatement = con.prepareStatement(sql); setParams(preparedStatement, params); ResultSet rs = preparedStatement.executeQuery(sql); // 获得记录的详细信息,然后获得总列数 ResultSetMetaData resMetaData = rs.getMetaData(); int colNum = resMetaData.getColumnCount(); // 用对象保存数据 String name = ""; String value = ""; List> list = new ArrayList>(); while (rs.next()) { Map cells = new HashMap(); for (int i = 0; i < colNum; i++) { name = resMetaData.getColumnLabel(i); if (cells.get(name) != null) { name = resMetaData.getColumnLabel(i); } if (rs.getObject(i) != null && resMetaData.getColumnTypeName(i).equals("DATETIME") || resMetaData.getColumnTypeName(i).equals("TIMESTAMP")) { value = rs.getObject(i).toString(); cells.put(name, value.substring(0, value.length() - 2)); } else { cells.put(name, rs.getString(i)); } } list.add(cells); } // 释放数据库资源 rs.close(); preparedStatement.close(); con.close(); return list; } catch (Exception e) { e.printStackTrace(); } return null; } public int exec(String sql, String date) throws Exception { logger.info("query data by sql:{} 时间:{}", sql, date); Connection con = null; CallableStatement call = null; try { com.fr.data.impl.Connection dbConnect = getDbConnect(); con = dbConnect.createConnection(); call = con.prepareCall(sql); call.registerOutParameter(1, Types.INTEGER); call.execute(); Integer ret = call.getInt(1); return ret; } catch (Exception e) { e.printStackTrace(); throw e; } finally { if (call != null) { call.close(); } if (con != null) { con.close(); } } } public Map findOneRow(String sql, Object... params) { List> select = select(sql, params); if (select != null) { if (!select.isEmpty()) { return select.get(0); } } return null; } public boolean checkExist(String sql, Object... params) throws Exception { Connection connection = getDbConnect().createConnection(); PreparedStatement pstmt = connection.prepareStatement(sql); setParams(pstmt, params); try { ResultSet resultSet = pstmt.executeQuery(); if (resultSet.next()) { return resultSet.getInt(1) > 0; } } catch (Exception e) { e.printStackTrace(); } finally { connection.close(); } return false; } private void setParams(PreparedStatement pstmt, Object... params) throws SQLException { if (params.length > 0) { int length = params.length; for (int i = 1; i <= length; i++) { pstmt.setObject(i, params[i - 1]); } } } public int exSqlUpdate(String sql, Object... params) throws Exception { logger.info("update data by sql:" + sql + " params " + Arrays.toString(params)); PreparedStatement pstmt = null; Connection connection = null; try { com.fr.data.impl.Connection dbConnect = getDbConnect(); connection = dbConnect.createConnection(); pstmt = connection.prepareStatement(sql); setParams(pstmt, params); int i = pstmt.executeUpdate(); return i; } catch (Exception e) { FineLoggerFactory.getLogger().error("执行更新SQL报错: sql:{}", e, sql); } finally { if (pstmt != null) { pstmt.close(); } if (connection != null) { connection.close(); } } return 0; } /** * 取查询结果集字段 * * @param sql * @param params * @return * @throws Exception */ public List> exQuery(String sql, Object... params) throws Exception { logger.info("query data by sql:" + sql + " params " + Arrays.toString(params)); com.fr.data.impl.Connection dbConnect = getDbConnect(); Connection connection = dbConnect.createConnection(); PreparedStatement pstmt = connection.prepareStatement(sql); setParams(pstmt, params); ResultSet resultSet = pstmt.executeQuery(); ResultSetMetaData resMetaData = resultSet.getMetaData(); int columnCount = resMetaData.getColumnCount(); List> arrs = new ArrayList>(); while (resultSet.next()) { String name; String value; Map one = new HashMap(); for (int i = 1; i <= columnCount; i++) { name = resMetaData.getColumnLabel(i); if (one.get(name) != null) { name = resMetaData.getColumnLabel(i); } if (resultSet.getObject(i) != null && resMetaData.getColumnTypeName(i).equals("DATETIME") || resMetaData.getColumnTypeName(i).equals("TIMESTAMP")) { value = resultSet.getObject(i).toString(); one.put(name, value.substring(0, value.length() - 2)); } else { one.put(name, resultSet.getString(i)); } } arrs.add(one); } pstmt.close(); connection.close(); return arrs; } }