新的Java访问mysql数据库工具类的操作代码
作者:popozyl 发布时间:2023-04-05 16:54:58
标签:Java,mysql,数据库,工具类
这是之前软工课设我写的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


猜你喜欢
- 1、思维导图2、什么是MVC?MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(con
- bufferedReader.readLine()读到最后发生阻塞最近在做一个imageserver,需求简化后就是使用socket响应HT
- java后端介绍今天我正式开始了一个新话题,那就是 Web。目前我主要会介绍后端。作为后端的老大哥 java,也有很多后端框架,比如大家耳熟
- 起因曾经用过西门子出的 * , 好处是直接有SDK开发包, 不会硬件开发也能直接使用缺点也是明显的, 就是只支持Windows系统, 另外就
- 新版的IDEA为了防止 pom 更新时,MAVEN 自动导包时卡死的问题,取消了自动导包机制。但新增了导入按钮和快捷键。 问题id
- 有这样一道面试题:如何将SQLite数据库(dictionary.db文件)与apk文件一起发布? 答: 把这个文件
- 这篇文章主要介绍发送验证码和校验验证码的功能,用到一个第三方平台Bmob,那Bmob是什么呢?Bmob可以开发一个云存储的移动应
- 前言jdk中提供了许多的并发工具类,大家可能比较熟悉的有CountDownLatch,主要用来阻塞一个线程运行,直到其他线程运行完毕。而jd
- Java List转换成String数组实现代码:List<String> list = new ArrayList<St
- 一、背景Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE
- 本文实例讲述了C#使用round函数四舍五入的方法。分享给大家供大家参考。具体分析如下:C#中的round函数实际上不是真正的四舍五入函数,
- 前言已经有两个月没有更新博客了,其实这篇文章我早在两个月前就写好了,一直保存在草稿箱里没有发布出来。原因是有一些原理性的东西还没了解清楚,最
- 前言其实很多人都会碰到文本不对齐,文字不对齐的情况,但是只要不明显被提出,一般都会置之不理。我关注这个问题是因为有个老哥问我倒计时的时候,1
- 前言我们利用printf 函数实现一个在屏幕上弹跳的小球,如图所示。弹跳的小球游戏比较简单、容易入门,也是反弹球消砖块、接金币、台球等很多游
- 一.服务器端获取Session对象依赖于客户端携带的Cookie中的JSESSIONID数据。如果用户把浏览器的隐私级别调到最高,这时浏览器
- 前言我们之前学的单链表,默认只能从链表的头部遍历到链表的尾部,在实际中应用太少见,太局限;而双向链表,对于该链表中的任意节点,既可以通过该节
- 本文实例讲述了java使用dom4j生成与解析xml文档的方法。分享给大家供大家参考,具体如下:xml是一种新的数据格式,主要用于数据交换。
- 这篇文章主要介绍了Spring-boot的debug调试代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 单链表:每个数据是以节点的形式存在的每个节点分为数据域和指针域数据域中保存该节点的数据指针域中保存指向下一个节点的指针实现思路:节点类Sin
- 最近IDEA打可执行Jar包搞了三天,一直失败,好好学习一下Maven-assembly,在此记录一下1. 需求项目打包,满足以下要求:1.