【JDBC】JDBC工具类封装
程序员文章站
2022-05-19 12:05:28
...
前言
最近有用到JDBC,然后封装了个JDBC工具类。
代码
import java.sql.*;
import java.util.*;
/**
* JDBC工具类:负责数据库操作。
*
* @author ChangSheng
* @date 2020-02-27
*/
public class JdbcUtil {
/** 加载数据库驱动程序 */
private final static String DRIVER = "com.mysql.jdbc.Driver";
/** URL */
private final static String URL = "jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=UTF-8";
/** 数据库用户名 */
private final static String USERNAME = "root";
/** 数据库密码 */
private final static String PASSWORD = "root";
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
public static void main(String[] args) {
// 连接测试
jdbcConnTest();
// 增删改使用演示。(demo中sql语句与参数仅供参考)
int i = executeUpdateDemo();
System.out.println(i);
// 查询使用演示。(demo中sql语句与参数仅供参考)
List<Map<String, Object>> list = executeQueryDemo();
System.out.println(list+"\n");
// 将List<Map<String, Object>>转成List<ProductType>
List<ProductType> pts = new ArrayList<>();
for (Map<String, Object> map : list) {
pts.add(new ProductType(Integer.parseInt(map.get("product_type_id")+""), map.get("product_type_name")+"", map.get("product_type_picture")+""));
}
System.out.println(pts);
}
/**
* JDBC连接测试
*/
public static void jdbcConnTest() {
if (JdbcUtil.getConn() != null) {
System.out.println("Connection success.");
}
}
/**
* 获得数据库连接
*
* @return 数据库连接
*/
public static Connection getConn() {
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return conn;
}
/**
* 释放资源
*
* @param conn 数据库连接
* @param ps PreparedStatement对象
* @param rs 结果集
*/
public static void closeAll(Connection conn, PreparedStatement ps, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 封装增加、删除、修改。
*
* @param preparedSql 预编译的 SQL 语句
* @param params 预编译的 SQL 语句中的"?"占位符
* @return 影响的条数
*/
public static int executeUpdate(String preparedSql, Object... params) {
try {
// 1.建立连接
conn = getConn();
// 2.处理预编译SQL语句
ps = conn.prepareStatement(preparedSql);
// 3.给占位符赋值
if (params != null) {
for (int i = 0; i < params.length; i++) {
// 为预编译sql设置参数
ps.setObject(i + 1, params[i]);
}
}
// 4.执行预编译SQL语句
return ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll(conn, ps, null);
}
return 0;
}
/**
* 封装查询。
*
* @param preparedSql 预编译的 SQL 语句
* @param params 预编译的 SQL 语句中的"?"占位符
* @return 结果集
*/
public static List<Map<String, Object>> executeQuery(String preparedSql, Object... params) {
List<Map<String, Object>> list = new ArrayList<>();
try {
// 1.建立连接
conn = JdbcUtil.getConn();
// 2.处理预编译SQL语句
ps = conn.prepareStatement(preparedSql);
// 3.给占位符赋值
if (params != null) {
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
}
// 4.执行预编译SQL语句(获得结果集)
rs = ps.executeQuery();
// 获得表结构(用于获取ResultSet对象中列的类型和属性的信息的对象。如字段数、字段名等等)
ResultSetMetaData rsmd = rs.getMetaData();
// 获取表中列的数量(ResultSet对象中的列数)
int cols = rsmd.getColumnCount();
// 5.遍历结果集
while (rs.next()) {
Map<String, Object> map = new HashMap<>(cols);
for (int i = 0; i < cols; i++) {
String colName = rsmd.getColumnName(i + 1);
Object colValue = rs.getObject(colName);
if (colValue == null) {
colValue = "";
}
map.put(colName, colValue);
}
list.add(map);
}
return list;
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.closeAll(conn, ps, rs);
}
return null;
}
/**
* 工具类JdbcUtil,查询使用演示。
*/
static List<Map<String, Object>> executeQueryDemo() {
// 参数
String sql = "select * from product_type where product_type_name=? and product_type_picture=?";
Object[] params = new Object[]{"类型名称1", "图片1"};
// 执行查询
return JdbcUtil.executeQuery(sql, params);
}
/**
* 工具类JdbcUtil,增删改使用演示。
*/
static int executeUpdateDemo() {
// 参数
String sql = "insert into product_type(product_type_name, product_type_picture) values(?, ?)";
Object[] params = new Object[]{"类型名称1", "图片1"};
// 执行增删改
return JdbcUtil.executeUpdate(sql, params);
}
}
相关
更多Java EE基础的 Servlet与JSP相关 请点击:【Servlet + JSP】 目录
上一篇: JDBC util 工具类
下一篇: 越秀区