Dependent package:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.1.0.7</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
Since it is just a small tool, there is no need to use a connection pool
Query tool class QueryRunnerDao:
public class QueryRunnerDao {
private final QueryRunner runner = new QueryRunner();
private Connection connection;
public QueryRunnerDao() {
getConn();
}
public void getConn() {
try {
connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "xxx");
} catch (SQLException e) {
e.printStackTrace();
}
}
public <T> List<T> queryByBeanList(String sql, Class<T> c, Object... params) throws SQLException {
List<T> rs = runner.query(connection, sql,
new BeanListHandler<T>(c), params);
DbUtils.close(connection);
return rs;
}
}
UserTabColumn:
package com.my.db.util;
public class UserTabColumn {
private String columnName;
private String dataType;
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
}
Get the field name and field type: TableUtils
import java.sql.SQLException;
import java.util.List;
public class TableUtils {
public List<UserTabColumn> queryDBColumn(String tableName) {
try {
return QueryRunnerDao.getInstance().queryByBeanList("select column_name,data_type from USER_TAB_COLUMNS t where table_name=upper(?)",
UserTabColumn.class, tableName);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
List<UserTabColumn> list = new TableUtils().queryDBColumn("test_table");
list.stream().forEach(userTabColumn -> {
System.out.println(userTabColumn.getColumnName()+","+userTabColumn.getDataType());
});
}
}
After running, it is found that there is list data, but the content inside is empty. The reason is that the database field is underlined and javaBean is hump.
Solution: Change BeanListHandler to the following to create
public <T> List<T> queryByBeanList(String sql, Class<T> c, Object... params) throws SQLException {
//new BasicRowProcessor(new GenerousBeanProcessor()) 的作用就是转换器,GenerousBeanProcessor可以实现数据库与java驼峰转换
List<T> rs = runner.query(connection, sql,
new BeanListHandler<T>(c, new BasicRowProcessor(new GenerousBeanProcessor())), params);
DbUtils.close(connection);
return rs;
}