新的Java访问mysql数据库工具类的操作代码
作者:popozyl 时间:2023-04-05 16:54:58
这是之前软工课设我写的java访问mysql工具类,它经过了多轮的测试,应该能够适应大多数的操作需求。比之前大二写的更鲁棒,更易用。
package util;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JOptionPane;
public class JdbcUtilV2 {
/**
* 定义需要的变量
*/
private static Connection connection = null;
/**
* 在大多情况下,我们使用的是PrepardStatement 来代替Statement
* 这样可以防止sql注入
*/
private static PreparedStatement preparedStatement = null;
private static ResultSet resultSet = null;
/**
* 连接数据库参数
*/
private static String username = "";
private static String password = "";
private static String driver = "";
private static String url = "";
/**
* 加载驱动,只需一次
*/
public JdbcUtilV2(String dr, String ur,String user, String passwd) {
try {
username = user;
password = passwd;
driver = dr;
url = ur;
Class.forName(driver);
} catch (Exception e) {
System.err.println("连接失败,请检查连接参数");
e.printStackTrace();
}
}
/**
* 获取数据库连接
*
* @return 返回Connection
*/
private static Connection getConnection() {
try {
connection = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
JOptionPane.showConfirmDialog(null , "获取连接失败,请检查网络是否连通", "系统消息", JOptionPane.CLOSED_OPTION);
e.printStackTrace();
}
return connection;
}
/**
* 查询表
* @return 返回查询结果的List
*/
public ArrayList<HashMap<String, Object>> query(String sql, Object ...params){
try {
connection = getConnection();
preparedStatement = connection.prepareStatement(sql);
setPreparedStatement(params);
resultSet = preparedStatement.executeQuery();
ResultSetMetaData metaData = resultSet.getMetaData(); // key name
int columnCount = metaData.getColumnCount(); // column count
ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
while(resultSet.next()) {
HashMap<String, Object> rowData = new HashMap<String, Object>();
for(int i = 1; i <= columnCount; ++i) {
rowData.put(metaData.getColumnName(i), resultSet.getObject(i));
}
list.add(rowData);
}
return list;
}catch (Exception e){
System.err.println("查询失败!");
e.printStackTrace();
} finally {
close();
}
return null;
}
public boolean exists(String sql, Object ...params) {
try {
connection = getConnection();
preparedStatement = connection.prepareStatement(sql);
setPreparedStatement(params);
resultSet = preparedStatement.executeQuery();
return resultSet.next();
}catch (Exception e){
System.err.println("查询失败!");
e.printStackTrace();
} finally {
close();
}
return false;
}
/**
* 可处理insert/delete/update语句
* @param sql sql语句
* @param params 占位符参数数组
* @return 返回bool值,表示是否成功
*/
public boolean execute(String sql, Object ...params){
try {
//获取连接
connection = getConnection();
preparedStatement = connection.prepareStatement(sql);
//对占位符进行赋值
setPreparedStatement(params);
//提交sql
preparedStatement.executeUpdate();
return true;
} catch (Exception e){
System.err.println("表更新失败!");
e.printStackTrace();
} finally {
close();
}
return false;
}
public void executeVoidProc(String sql, Object ...params){
try {
//获取连接
connection = getConnection();
preparedStatement = connection.prepareStatement(sql);
//对sql中的占位符进行赋值
setPreparedStatement(params);
preparedStatement.execute();
}catch (Exception e){
System.err.println("查询失败!");
e.printStackTrace();
} finally {
close();
}
}
/**
* 对sql语句中的占位符进行赋值
* @param params 参数值
* @throws SQLException sql异常
*/
private void setPreparedStatement(Object ... params) throws SQLException {
if(params != null && params.length > 0){
for(int i = 0; i < params.length; i++){
if("null".equals(params[i])){
preparedStatement.setNull(i + 1, Types.NULL);
}else{
preparedStatement.setObject(i + 1, params[i]);
}
}
}
}
/**
* 关闭资源的函数
*/
private void close() {
if(resultSet != null) {
try {
resultSet.close();
} catch (Exception e) {
e.printStackTrace();
}
resultSet = null;
}
if(preparedStatement != null) {
try {
preparedStatement.close();
} catch (Exception e) {
e.printStackTrace();
}
preparedStatement = null;
}
if(connection != null) {
try {
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
connection = null;
}
}
}
来源:https://www.cnblogs.com/popodynasty/p/15670452.html
标签:Java,mysql,数据库,工具类
0
投稿
猜你喜欢
谈谈对Java中的volatile的理解
2022-06-28 06:31:26
Android悬浮对话框(即点即关对话框)实现代码
2023-01-01 04:53:54
SpringBoot实现动态定时任务的示例代码
2022-06-22 19:27:39
Java如何将ResultSet结果集遍历到List中
2022-07-01 06:30:46
提升java开发效率工具lombok使用争议
2022-06-22 03:08:18
Java中后台线程实例解析
2022-01-05 06:45:08
Spring Cloud 覆写远端的配置属性实例详解
2022-09-10 22:06:23
Javassist用法详解
2023-06-26 17:11:54
springboot前端传参date类型后台处理的方式
2023-04-12 16:47:35
Springboot下swagger-ui.html访问不到的解决方案
2022-08-20 20:52:22
Java Controller实现参数验证与统一异常处理流程详细讲解
2022-01-25 18:49:47
android多线程断点下载-带进度条和百分比进度显示效果
2022-03-20 14:30:43
Java main 方法面试题的详细整理
2023-11-24 23:53:30
【java 多线程】守护线程与非守护线程的详解
2023-11-29 01:35:29
spring依赖注入知识点分享
2023-11-26 15:32:32
Android setTag方法的key问题解决办法
2021-09-12 14:29:37
Java Swing实现让窗体居中显示的方法示例
2023-11-06 02:59:07
在IDEA中配置tomcat并创建tomcat项目的图文教程
2023-08-11 11:33:59
详解通过JDBC进行简单的增删改查(以MySQL为例)
2023-08-14 20:16:40
C# Websocket连接实现wss协议
2022-09-02 08:20:41