public class DBUtils extends Object
数据库工具.
使用示例:
DataSourceBean ds = new DataSourceBean();
ds.setDriver(DBType.MYSQL.DRIVER);
ds.set....
Connection conn = DBUtils.getConn(ds);
DBUtils.query(DBUtils, sql);
DBUtils.close(conn);
| 限定符 | 构造器和说明 |
|---|---|
protected |
DBUtils()
私有化构造函数
|
| 限定符和类型 | 方法和说明 |
|---|---|
static List<Map<String,Object>> |
callSP(Connection conn,
String proSql,
Object[] params)
调用存储过程,获取[结果集]返回。
|
static void |
close(Connection conn)
关闭数据库连接
|
static void |
commit(Connection conn)
提交数据库变更
|
static boolean |
createBeanFromDB(Connection conn,
String packageName,
String outDirPath,
String[] exportTables)
根据物理表生成对应的JavaBean类文件(类似Bean与Dao的复合对象).
|
static boolean |
createBeanFromPDM(String pdmPath,
String packageName,
String outDirPath,
String[] exportTables)
根据物理模型生成对应的JavaBean类文件(类似Bean与Dao的复合对象).
|
static String |
execSP(Connection conn,
String proSql,
Object[] params)
执行存储过程,获得简单返回值(支持[无返回值]和 [单值]返回两种形式)。
|
static boolean |
execute(Connection conn,
String sql)
执行普通sql
|
static boolean |
execute(Connection conn,
String preSql,
Object[] params)
执行预编译sql
|
static Connection |
getConn(DataSourceBean ds)
获取数据库连接(先通过连接池获取,若连接池获取失败,则改用JDBC获取).
|
static Connection |
getConn(DataSourceBean ds,
int retry)
获取数据库连接(先通过连接池获取,若连接池获取失败,则改用JDBC获取).
|
static Connection |
getConnByJDBC(DataSourceBean ds)
通过JDBC获取数据库连接.
|
static Connection |
getConnByPool(DataSourceBean ds)
通过连接池获取数据库连接
|
static DBType |
judgeDBType(Connection conn)
通过Connection判断数据库类型
|
static <BEAN> List<BEAN> |
query(Class<BEAN> clazz,
Connection conn,
String sql)
查询一个JavaBean对应的物理表数据,并把对应列值转存到JavaBean对应的成员域.
|
static Object |
queryCellObj(Connection conn,
String sql)
查询[第一行][第一列]的单元格值(所得值保留其原本的数据类型).
|
static String |
queryCellStr(Connection conn,
String sql)
查询[第一行][第一列]的单元格值(所得值强制转换为String类型).
|
static List<Object> |
queryColumnObj(Connection conn,
String sql,
int col)
查询[第col列]表数据(数据值保留其原本的数据类型).
|
static List<String> |
queryColumnStr(Connection conn,
String sql,
int col)
查询[第col列]表数据(数据值会被强制转换成String类型).
|
static Map<String,Object> |
queryFirstRowObj(Connection conn,
String sql)
查询[第一行]表数据.
|
static Map<String,String> |
queryFirstRowStr(Connection conn,
String sql)
查询[第一行]表数据.
|
static int |
queryInt(Connection conn,
String sql)
查询一个int整数值.
|
static Map<String,Object> |
queryKVO(Connection conn,
String sql)
查询键值对(其中值会保留其原本数据类型).
|
static List<Map<String,Object>> |
queryKVOs(Connection conn,
String sql)
查询多行表数据.
|
static Map<String,String> |
queryKVS(Connection conn,
String sql)
查询键值对(其中值会被强制转换为String类型).
|
static List<Map<String,String>> |
queryKVSs(Connection conn,
String sql)
查询多行表数据.
|
static long |
queryLong(Connection conn,
String sql)
查询一个long整数值.
|
static void |
setAutoCommit(Connection conn,
boolean autoCommit)
开/关 数据库自动提交
|
static void |
setAutoShutdownPool(boolean auto)
设置是否自动关闭线程池.
|
static void |
shutdownPool()
马上关闭线程池
|
static void |
shutdownPool(int delay)
延迟一段时间后关闭线程池
|
static boolean |
testConn(DataSourceBean ds)
测试数据源连接是否可用
|
public static void setAutoShutdownPool(boolean auto)
设置是否自动关闭线程池.
使用场景:
通常当在进程销毁钩子中需要入库操作时, 若使用线程池, 则必定报错:
Attempt to refer to a unregistered pool by its alias xxx
这是因为proxool总是最先向JVM请求销毁自身, 导致在进程销毁钩子无法使用线程池, 只能使用常规的JDBC操作.
通过此方法, 在程序使用线程池之前设置 false 可以避免这种主动销毁的行为
但是在进程钩子的最后, 需要手动调用 shutdownPool() 方法关闭线程池
auto - true:自动关闭线程池(默认); false:手动关闭线程池public static void shutdownPool()
public static void shutdownPool(int delay)
delay - 延迟时间, 单位:mspublic static boolean testConn(DataSourceBean ds)
ds - 数据源public static DBType judgeDBType(Connection conn)
conn - 数据库连接public static Connection getConn(DataSourceBean ds)
获取数据库连接(先通过连接池获取,若连接池获取失败,则改用JDBC获取).
在连接成功前,重试若干次(默认10次)
ds - 数据库配置信息public static Connection getConn(DataSourceBean ds, int retry)
获取数据库连接(先通过连接池获取,若连接池获取失败,则改用JDBC获取).
在连接成功前,重试若干次.
ds - 数据库配置信息retry - 重试次数public static Connection getConnByPool(DataSourceBean ds)
ds - 数据库配置信息public static Connection getConnByJDBC(DataSourceBean ds)
通过JDBC获取数据库连接. (在shutdown等场景下无法通过连接池获取连接,此时需用JDBC方式)
ds - 数据库配置信息public static void setAutoCommit(Connection conn, boolean autoCommit)
conn - 数据库连接autoCommit - 是否自动提交public static void commit(Connection conn)
conn - 数据库连接public static void close(Connection conn)
conn - 数据库连接public static boolean createBeanFromDB(Connection conn, String packageName, String outDirPath, String[] exportTables)
根据物理表生成对应的JavaBean类文件(类似Bean与Dao的复合对象).
表名和列名会自动做前缀删除和驼峰处理.
例如:
表名为 T_CP_USER, 类名则为 CpUser
列名为 I_ID,类成员域名则为iId
conn - 数据库连接packageName - 所生成的JavaBean类文件的包路径, 如: foo.bar.beanoutDirPath - 所生成的JavaBean类文件的存储路径, 如: ./src/main/java/foo/bar/beanexportTables - 需要导出为JavaBean的物理表名集(若为空则全库导出)public static boolean createBeanFromPDM(String pdmPath, String packageName, String outDirPath, String[] exportTables)
根据物理模型生成对应的JavaBean类文件(类似Bean与Dao的复合对象).
表名和列名会自动做前缀删除和驼峰处理.
例如:
表名为 T_CP_USER, 类名则为 CpUser
列名为 I_ID,类成员域名则为iId
pdmPath - 物理模型文件路径(支持PowerDesigner)packageName - 所生成的JavaBean类文件的包路径, 如: foo.bar.beanoutDirPath - 所生成的JavaBean类文件的存储路径, 如: ./src/main/java/foo/bar/beanexportTables - 需要导出为JavaBean的物理表名集(若为空则全库导出)public static <BEAN> List<BEAN> query(Class<BEAN> clazz, Connection conn, String sql)
clazz - JavaBean类定义conn - 数据库连接sql - 查询sqlpublic static Map<String,String> queryKVS(Connection conn, String sql)
查询键值对(其中值会被强制转换为String类型).
仅适用于形如 【select key, value from table where ...】 的sql
conn - 数据库连接sql - 键值对查询SQLpublic static Map<String,Object> queryKVO(Connection conn, String sql)
查询键值对(其中值会保留其原本数据类型).
仅适用于形如 【select key, value from table where ...】 的sql
conn - 数据库连接sql - 键值对查询SQLpublic static List<Map<String,String>> queryKVSs(Connection conn, String sql)
查询多行表数据.
每行数据以列名为key,以列值为val(列值会被强制转换成String类型).
conn - 数据库连接sql - 查询sqlpublic static List<Map<String,Object>> queryKVOs(Connection conn, String sql)
查询多行表数据.
每行数据以列名为key,以列值为val(列值会保留其原本数据类型).
conn - 数据库连接sql - 查询sqlpublic static int queryInt(Connection conn, String sql)
查询一个int整数值. 若返回的不是 1x1 的结果集,只取 [1][1] 作为返回值.
conn - 数据库连接sql - 查询sqlpublic static long queryLong(Connection conn, String sql)
查询一个long整数值. 若返回的不是 1x1 的结果集,只取 [1][1] 作为返回值.
conn - 数据库连接sql - 查询sqlpublic static String queryCellStr(Connection conn, String sql)
查询[第一行][第一列]的单元格值(所得值强制转换为String类型). 若返回的不是 1x1 的结果集,只取 [1][1] 作为返回值.
conn - 数据库连接sql - 查询sqlpublic static Object queryCellObj(Connection conn, String sql)
查询[第一行][第一列]的单元格值(所得值保留其原本的数据类型). 若返回的不是 1x1 的结果集,只取 [1][1] 作为返回值.
conn - 数据库连接sql - 查询sqlpublic static Map<String,String> queryFirstRowStr(Connection conn, String sql)
查询[第一行]表数据.
行数据以列名为key,以列值为val(列值会被强制转换成String类型).
conn - 数据库连接sql - 查询sqlpublic static Map<String,Object> queryFirstRowObj(Connection conn, String sql)
查询[第一行]表数据.
行数据以列名为key,以列值为val(列值保留其原本的数据类型).
conn - 数据库连接sql - 查询sqlpublic static List<String> queryColumnStr(Connection conn, String sql, int col)
查询[第col列]表数据(数据值会被强制转换成String类型).
conn - 数据库连接sql - 查询sqlpublic static List<Object> queryColumnObj(Connection conn, String sql, int col)
查询[第col列]表数据(数据值保留其原本的数据类型).
conn - 数据库连接sql - 查询sqlpublic static boolean execute(Connection conn, String preSql, Object[] params)
conn - 数据库连接preSql - 预编译sqlparams - 参数表public static boolean execute(Connection conn, String sql)
conn - 数据库连接sql - 普通sqlpublic static String execSP(Connection conn, String proSql, Object[] params)
执行存储过程,获得简单返回值(支持[无返回值]和 [单值]返回两种形式)。
根据数据库连接自动识别 mysql、sybase、oracle。
注意:
参数如果有null,则可能出错,特别是sybase数据库
mysql存储过程要求:
入参表:proSql的占位符?个数 必须与 入参表params长度相同,否则抛出SQLException异常。
返回值:最后一个结果集(即SELECT语句)的第1行、第1列的值。
sybase存储过程要求:
入参表:proSql的占位符?个数 必须与 入参表params长度相同,否则抛出SQLException异常。
返回值:return所指定的值。
oracle存储过程要求:
入参表:当proSql的占位符?个数 比 入参表params长度多0,为无返回值形式;
多1,为有返回值形式。其余情况抛出SQLException异常。
返回值:当proSql的占位符?个数比入参表params多1,则认为最后1个占位符是出参。
conn - 数据库连接proSql - 存储过程SQL,占位符格式,如 SP_TEST(?,?,?)params - 入参表public static List<Map<String,Object>> callSP(Connection conn, String proSql, Object[] params)
调用存储过程,获取[结果集]返回。
根据数据库连接自动识别 mysql、sybase、oracle。
注意:
参数如果有null,则可能出错,特别是sybase数据库
mysql存储过程要求:
入参表:proSql的占位符?个数 必须与 入参表params长度相同,否则抛出SQLException异常。
返回值:最后一个结果集(即SELECT语句)的第1行、第1列的值。
sybase存储过程要求:
入参表:proSql的占位符?个数 必须与 入参表params长度相同,否则抛出SQLException异常。
返回值:return所指定的值。
oracle存储过程要求:
入参表:当proSql的占位符?个数 比 入参表params长度多0,为无返回值形式;
多1,为有返回值形式。其余情况抛出SQLException异常。
返回值:当proSql的占位符?个数比入参表params多1,则认为最后1个占位符是出参。
conn - 数据库连接proSql - 存储过程SQL,占位符格式,如 SP_TEST(?,?,?)params - 入参表Copyright © 2022. All rights reserved.