package com.feifan.aida.utils;
import com.alibaba.druid.pool.DruidDataSource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Component
public class CommonExecuteSqlUtils {
@Value("${spring.datasource.saas.url}")
private String url;
@Value("${spring.datasource.saas.username}")
private String user;
@Value("${spring.datasource.saas.password}")
private String pwd;
@Value("${spring.datasource.saas.connectionProperties}")
private String connectionProperties;
@Value("${spring.datasource.saas.filters}")
private String filter;
/**
* 手动执行sql查询
* @param
* @return
*/
public List<Map<String, Object>> getConnectionAndExecuteQuery(String sql) {
Statement stmt = null;
Connection con = null;
ResultSet resultSet = null;
List<Map<String, Object>> resultList = new ArrayList<>();
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(pwd);
dataSource.setConnectionProperties(connectionProperties);
try {
dataSource.setFilters(filter);
con = dataSource.getConnection();
stmt = con.createStatement();
resultSet = stmt.executeQuery(sql);
ResultSetMetaData metaData = resultSet.getMetaData();
while (resultSet.next()) {
Map<String, Object> dataMap = new HashMap<>();
for (int i = 1; i <= metaData.getColumnCount(); i++) {
dataMap.put(metaData.getColumnLabel(i), resultSet.getObject(i));
} resultList.add(dataMap);
}
}catch (Exception e){
log.error("数据库连接失败",e);
}finally {
try {
if (resultSet != null) {
resultSet.close();
}
if (stmt != null) {
stmt.close();
}
if (con != null){
con.close();
}
} catch (SQLException e) {
log.error("数据库资源关闭失败",e);
}
}
return resultList;
}
public void executeSql(String sql){
String driver = "com.mysql.cj.jdbc.Driver";
try {
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, pwd);
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement(sql);
//创建表要用 execute
ps.execute();
conn.commit();
ps.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}