首页 > 其他分享 >JDBC工具类模版

JDBC工具类模版

时间:2023-12-14 10:55:34浏览次数:20  
标签:JDBC return parameters 模版 sql import 工具 null conn

package JavaEndWork;

import java.beans.Statement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;

import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import com.alibaba.druid.pool.DruidDataSourceFactory;
/**
* @author 周琨
*JDBC助手类
*/
public class JdbcHelper {
private static DataSource dataSource;
private static final Logger log = LoggerFactory.getLogger(JdbcHelper.class);
private static JdbcHelper instance;
/*
* 初始化数据库
*/
static {
try {
Properties prop = new Properties();
prop.load(JdbcHelper.class.getClassLoader().getResourceAsStream("java.properties"));
System.out.println(prop.getProperty("url"));
dataSource = DruidDataSourceFactory.createDataSource(prop);
}catch (Exception e) {
log.error(e.getMessage(),e);
}
}

/*
* 构造方法私有化,外部不允许创建该实例
*/
private JdbcHelper() {

}

/*
* 获取数据库连接
* {@link Connection}
* @throws SQLException
*/

public Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
log.error(e.getMessage(),e);
throw new RuntimeException(e);
}
}

/**
* 释放资源
* @param rs 结果集
* @param stat 语句对象
* @param conn 连接对象
*/

public void free(ResultSet rs, Statement stat, Connection conn) {
try {
if(rs != null)
rs.close();
} catch (SQLException e) {
log.error(e.getMessage(), e);
} finally {
try {
if(stat != null)
((Connection) stat).close();
} catch (SQLException e) {
log.error(e.getMessage(), e);
} finally {
try {
if(conn != null)
conn.close();
} catch (SQLException e) {
log.error(e.getMessage(), e);
}
}
}
}

/**
* 获取该类的唯一实例
* @return 唯一实例
*/
public static JdbcHelper getInstance() {
if(instance == null) {
synchronized (JdbcHelper.class) {
if(instance == null)
instance = new JdbcHelper();
}
}
return instance;
}

/**
* 获取数据源
* @return 数据源
*/
public static DataSource getDataSource() {
return dataSource;
}
}

 

 

 

package JavaEndWork;

import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.RowSet;
import javax.sql.rowset.RowSetFactory;
import javax.sql.rowset.RowSetProvider;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author 周琨
*
*/
public class memberDaoHelp {
private JdbcHelper helper = JdbcHelper.getInstance();
private static final Logger log = LoggerFactory.getLogger(memberDaoHelp.class);
private static memberDaoHelp user = new memberDaoHelp();
private memberDaoHelp() {};

public int executeUpdate(String sql,Object...parameters) {
//获取数据库连接
var conn = helper.getConnection();
try {
//预编译语句对象
var ptst = conn.prepareStatement(sql);
//对预编译语句对象中的?参数设值
for(var i = 0; parameters != null && i < parameters.length;i ++) {
ptst.setObject(i + 1, parameters[i]);
}
return ptst.executeUpdate();
} catch (SQLException e) {
log.error(e.getMessage(), e);
}finally {
helper.free(null, null, conn);
}
return 0;
}

public static memberDaoHelp getmember() {
return user;
}

/**
* insert操作,返回自增主键
* @param sql insert语句
* @param parameters sql语句中?参数列表值
* @return 自增的主键
*/

public Integer insert(String sql,Object...parameters) {
Integer result = null;
//获取数据库连接
var conn = helper.getConnection();
try {
//预编译语句对象
var ptst = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
//对预编译语句对象中的?设值
for(var i = 0; parameters != null && i < parameters.length;i ++) {
ptst.setObject(i + 1, parameters[i]);
}
//执行dml语句
ptst.executeUpdate();
//从结果中获取自增主键
var rs = ptst.getGeneratedKeys();
if(rs.next())
return rs.getInt(1);
} catch (SQLException e) {
log.error(e.getMessage(), e);
}finally {
helper.free(null, null, conn);
}
return result;
}
/**
* 采用模板方法模式封装dql语句的处理逻辑
* @param sql select语句
* @param parameters sql语句中?参数列表值
* @return 查询结果集
*/
public RowSet executeQuery(String sql,Object...parameters) {
var conn = helper.getConnection();
try {
var ptst = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
for(var i = 0; parameters != null && i < parameters.length; i ++) {
ptst.setObject(i +1, parameters[i]);
}
var rs = ptst.executeQuery();
RowSetFactory factory = RowSetProvider.newFactory();
//通过RowSetFactory把应用程序和RowSet实现类分离开
var rowset = factory.createCachedRowSet();
//将结果集中的内容转装载进RoeSet中
rowset.populate(rs);
return rowset;
} catch (SQLException e) {
log.error(e.getMessage(), e);
return null;
}finally {
helper.free(null, null, conn);
}
}
}

 

标签:JDBC,return,parameters,模版,sql,import,工具,null,conn
From: https://www.cnblogs.com/1757656300qqcom/p/17900724.html

相关文章

  • 【SpringBootWeb入门-12】MySQL-DDL-图形化工具
    1、章节前言上一篇文章我们讲解了MySQL的安装与配置,以及相关sql命令的执行操作,在演示这些sql语句的时候,我们都是在命令行当中进行操作的,在命令行当中敲写语句很不方便,主要原因有以下几点:无提示:命令行当中输入任何sql语句没有任何提示,全凭记忆,而且很容易敲错代码;操作繁琐:全部的......
  • Linux sudo 工具错误解决方案
    Sudo概述sudo(superuserdo)是一个在Unix-like操作系统中允许普通用户以超级用户(root)的身份执行特定命令的工具。它的原理涉及到系统的权限管理和安全性。以下是sudo的基本工作原理:用户权限检查:当用户尝试使用sudo执行命令时,sudo会首先检查用户的身份和权限。通常,只有在......
  • 如何判断lib和dll是32位还是64位?答案是使用微软的dumpbin工具,后面讲了如何使用gcc生成
    为什么我会考虑这个问题呢?因为我在使用java去调用一个c的lib库的时候,弹出以下警告:D:\work\ideaworkpaces\jdk21Test001\src\main\java\lib\hello.lib:%1不是有效的Win32应用程序。atjava.base/jdk.internal.loader.NativeLibraries.load(NativeMethod)然后我就在想是不是......
  • 文生图工具,520示爱小工具
    大家好,我是DOM哥也许你会好奇上面的这张图片是怎么生成的,接下来我就开始隆重介绍这款文生图工具当然,并非AI的那个文生图啦预览地址:https://dombro.site/tools#/text-image非常简洁的界面啊!左边是预览区,右边是配置区图片模式呢,是能把一张图片变成由文字组成用起来也......
  • 多开工具在音乐制作与创作中的应用实践
    多开工具在音乐制作与创作中的应用实践随着数字化技术的不断发展,音乐制作与创作领域也迎来了前所未有的变革。在过去,音乐制作需要大量的专业设备和复杂的流程,但现在,借助于多开工具,音乐人们可以更加高效地进行创作和制作。本文将探讨多开工具在音乐制作与创作中的应用实践,并探讨它......
  • 保姆级教程利用免费内网穿透工具快速实现远程访问SMB文件共享
    当你需要在远程网络中访问SMB(ServerMessageBlock)共享资源时,你可以使用Solopace.Gem来建立安全且便捷的连接。Solopace.Gem是一款专为远程访问和网络连接而设计的工具,它能够轻松地穿越NAT(网络地址转换)和防火墙,如果运营商的防火墙让你能够安全地远程访问SMB共享文件夹。本教程将指......
  • 本地搭建Stable Diffusion并利用免费组网工具实现远程访问AI绘图服务
    很多小伙伴在家里或者公司搭建了本地的StableDiffusionWebUI需要异地访问或者共享给其他小伙伴使用服务,如果机器本身搭建在公网服务器上面有域名就可以共享出去,但是涉及到安全问题所以大多数人都是部署在本地服务器或者家里的电脑上面。笔者通过B站秋葉aaaki的教程进行一键安装S......
  • 知识库搭建工具年度总结来啦!赶紧收藏!
    随着信息时代的到来,知识管理变得越来越重要。无论是个人还是企业,都需要一个高效的知识库来存储和管理各种知识资源。为了帮助大家搭建一个优秀的知识库,我将为大家推荐4款知识库搭建工具。下面我们一起来了解这些工具吧!HelpLookHelpLook是一款功能强大的知识库搭建工具。它提供了全......
  • 使用免费内网穿透工具随时随地访问PVE(Proxmox Virtual Environment)
    什么是PVE?ProxmoxVirtualEnvironment(简称ProxmoxVE)是一种开源的虚拟化平台,它集成了虚拟化和容器技术。以下是一些导致越来越多人使用ProxmoxVE的原因:开源性质:ProxmoxVE是开源软件,这意味着用户可以自由地查看、修改和分发其源代码。这种自由度吸引了许多用户,尤其是那些寻求经......
  • VSCode 中使用 AI智能编程工具的几个小妙招
    可能你已经在IDE中安装了CodeGeeX,也了解到CodeGeeX能够帮助你编写代码、调试问题、创建文档,生成单元测试等。但是总有些“Wow!”时刻,还在等你发现。今天就介绍几个CodeGeeX插件在VSCode中的使用技巧和小窍门。一、侧边栏放右边,效率倍增默认情况下,CodeGeeX插件在VSCode中成功安装......