import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 封装DBUtil的目的(1,简化jdbc操作的流程。2保证所有的资源能够正常释放)
*
* @author suicy
*
*/
public class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/tf63?characterEncoding=UTF8";
private static final String USERNAME = "root";
private static final String PASSWORD = "root";
private DBUtil() {
}
/**
* 注册驱动 static 只执行一次即可
*/
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(0);
}
}
/**
* 数据更新方法可执行insert,update,delete语句
*
* @param sql
* SQL语句
* @param params
* 动态参数
* @return Integer 影响的行数
* @throws SQLException
*/
public static int update(String sql, Object... params) throws SQLException {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
pstmt = conn.prepareStatement(sql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
if(params[i] instanceof InputStream){
pstmt.setBinaryStream(i + 1, (InputStream)params[i]);
}else{
pstmt.setObject(i + 1, params[i]);
}
}
}
return pstmt.executeUpdate();
} finally {
closeAll(null, pstmt, conn);
}
}
/**
* 执行查询的方法
* @param sql Select语句
* @param params 查询语句动态参数
* @return List<Map<String, Object>> 查询结果List<Map<ColunmLabel, ColunmValue>>
* @throws SQLException
*/
public static List<Map<String, Object>> query(String sql, Object... params) throws SQLException {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet res = null;
try {
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
pstmt = conn.prepareStatement(sql);
if (params != null) {
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i + 1, params[i]);
}
}
res = pstmt.executeQuery();
//获取结果集元数据 包含结果集列数,每列类型、标题、字段名称等信息
ResultSetMetaData rsmd = res.getMetaData();
List<Map<String, Object>> data = new ArrayList<>();
int columnCount = rsmd.getColumnCount();//获取结果集列数
while (res.next()) {
//每执行一次while循环 证明查询到一条数据 所以创建一个map对象
Map<String, Object> rowData = new HashMap<>();
for (int i = 1; i <=columnCount; i++) {
//字段名称为key,字段值为value
if(rsmd.getColumnType(i)==Types.LONGVARBINARY){
rowData.put(rsmd.getColumnLabel(i), res.getBinaryStream(i));
}else{
rowData.put(rsmd.getColumnLabel(i), res.getObject(i));
}
}
data.add(rowData);
}
return data;
} finally {
closeAll(res, pstmt, conn);
}
}
private static void closeAll(ResultSet res, Statement stmt, Connection conn) throws SQLException {
try {
if (res != null) {
res.close();
}
} catch (SQLException e) {
throw e;
}
try {
if (stmt != null) {
stmt.close();
}
} catch (SQLException e) {
throw e;
}
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
throw e;
}
}
}
Java学习总结——JDBC工具类
猜你喜欢
转载自blog.csdn.net/weixin_41577923/article/details/82965278
今日推荐
周排行