Java 阿里巴巴数据源_JDBC操作数据库工具类(使用阿里Druid原生API创建数据源)...

packagecom.zdlt.auth.api.common.druid;importlombok.extern.slf4j.Slf4j;importjavax.sql.DataSource;import java.sql.*;importjava.util.ArrayList;importjava.util.LinkedHashMap;importjava.util.List;importjava.util.Map;/*** 数据库操作工具类

*

*@authorshiyanjun

*@since2019-12-15*/@Slf4jpublic classDbUtil {/*** 获取数据库连接

*

*@paramdataSource 数据源

*@return连接

*@throwsSQLException*/

public static Connection getConnection(DataSource dataSource) throwsSQLException {returndataSource.getConnection();

}/*** 获取模型项实例数据源

*

*@return数据源

*@throwsException*/

public staticDataSource getDMInstanceDataSource() {returnDMInstanceDb.INSTANCE.getDataSource();

}/*** 执行查询SQL语句

*

*@paramdataSource 数据源

*@paramquerySql 查询SQL语句

*@return查询结果*/

public static List>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> 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);

}returnresultList;

}/*** 解析结果集

*

*@paramrs 结果集

*@parammd 结果集元数据

*@return表数据

*@throwsSQLException*/

private static List> getResultMap(ResultSet rs, ResultSetMetaData md) throwsSQLException {

List> resultList = new ArrayList<>();int columnCount =md.getColumnCount();while(rs.next()) {

Map 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);

}returnresultList;

}/*** 根据字段名称和字段类型获取字段的值

*

*@paramrs 结果集

*@parammd 结果集元数据

*@paramcolumnName 字段名称

*@paramindex 字段序号

*@return字段的值

*@throwsSQLException*/

private staticObject getType(ResultSet rs, ResultSetMetaData md,

String columnName,int index) throwsSQLException {int columnType =md.getColumnType(index);switch(columnType) {caseTypes.ARRAY:returnrs.getArray(columnName);caseTypes.BIGINT:returnrs.getInt(columnName);caseTypes.BOOLEAN:returnrs.getBoolean(columnName);caseTypes.BLOB:returnrs.getBlob(columnName);caseTypes.DOUBLE:returnrs.getDouble(columnName);caseTypes.FLOAT:returnrs.getFloat(columnName);caseTypes.INTEGER:returnrs.getInt(columnName);caseTypes.NVARCHAR:returnrs.getNString(columnName);caseTypes.VARCHAR:returnrs.getString(columnName);caseTypes.TINYINT:returnrs.getInt(columnName);caseTypes.SMALLINT:returnrs.getInt(columnName);caseTypes.DATE:returnrs.getDate(columnName);caseTypes.TIMESTAMP:returnrs.getTimestamp(columnName);default:returnrs.getObject(columnName);

}

}/*** 关闭资源

*

*@paramstatement 语句执行器

*@paramconnection 连接*/

public static voidcloseResource(Statement statement, Connection connection) {

closeStatement(statement);

closeConnection(connection);

}/*** 关闭资源

*

*@paramresultSet 结果集

*@paramstatement 语句执行器

*@paramconnection 连接*/

public static voidcloseResource(ResultSet resultSet, Statement statement, Connection connection) {

closeResultSet(resultSet);

closeStatement(statement);

closeConnection(connection);

}/*** 关闭结果集

*

*@paramresultSet 结果集*/

public static voidcloseResultSet(ResultSet resultSet) {if (resultSet != null) {try{

resultSet.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

}/*** 关闭语句执行器

*

*@paramstatement 语句执行器*/

public static voidcloseStatement(Statement statement) {if (statement != null) {try{

statement.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

}/*** 关闭连接

*

*@paramconnection 连接*/

public static voidcloseConnection(Connection connection) {if (connection != null) {try{

connection.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

在Spring项目中使用阿里巴巴Druid连接池来装载Oracle数据源,可以按照以下步骤进行: 1. 首先,在pom.xml文件中添加Druid和Oracle驱动的依赖: ``` <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>com.oracle.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.7.0.0</version> </dependency> ``` 2. 在Spring配置文件中配置数据源: ``` <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL"/> <property name="username" value="your_username"/> <property name="password" value="your_password"/> <property name="initialSize" value="5"/> <property name="maxActive" value="50"/> <property name="minIdle" value="5"/> <property name="maxWait" value="60000"/> <property name="validationQuery" value="SELECT 1 FROM DUAL"/> <property name="testWhileIdle" value="true"/> <property name="timeBetweenEvictionRunsMillis" value="60000"/> <property name="minEvictableIdleTimeMillis" value="300000"/> <property name="poolPreparedStatements" value="true"/> <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/> </bean> ``` 其中,initialSize是连接池启动时创建的初始化连接数;maxActive是连接池最大连接数;minIdle是连接池最小连接数;maxWait是获取连接的最大等待时间;validationQuery是用来检测连接是否有效的SQL语句;testWhileIdle是空闲时是否进行连接检测;timeBetweenEvictionRunsMillis是定时检查连接池中空闲连接的间隔时间;minEvictableIdleTimeMillis是连接池中连接最小空闲时间;poolPreparedStatements是是否缓存PreparedStatement;maxPoolPreparedStatementPerConnectionSize是单个连接池中最大的缓存Statement数目。 3. 在DAO层中使用数据源: ``` @Repository public class UserDaoImpl implements UserDao { @Autowired private DataSource dataSource; private JdbcTemplate jdbcTemplate; @PostConstruct public void init() { jdbcTemplate = new JdbcTemplate(dataSource); } // ... } ``` 在DAO实现类中通过@Autowired注入Druid数据源,并在@PostConstruct注解的init()方法中创建JdbcTemplate对象,即可使用数据源进行数据库操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值