JAVA 数据库操作工具类(项目封装,mySQL)

JDBC 实战教程——尚硅谷学习笔记 2023年 技术版本备注IDEA2022.3.3最新版本JDK17MySQL-JDBC 驱动8.0.318.0.25+Druid1.2.17MySQL8.0.31前置技术需要软件MySQL 软件安装(8+ 版本)MySQL 可视化工具安装IDEA 工具安装(推荐 2022 版本)SQL 语句掌握数据库连接命令掌握基本的 DDL,DQL,DML 等命令掌握数据库事务概念Java 基础语法多态机制基本容器使用(集合和数组等)泛型反射等技术。 阅读详情

最近项目中封装的数据库操作,使用的是MySQL数据库。

1、mysqlHelper类,包括对数据库的CRUD操作,其中查询有单记录返回和多记录返回。此处用到了java反射机制。

/**
 * 数据库操作类,包括增删改查
 * @author jiangshuai
 * @serialData 2017-4-11
 * @category class of mysql operation
 * @version v1.0
 */
class mysqlHelper
{
    //加载驱动
    private final String DRIVER = "com.mysql.jdbc.Driver";
    //定义数据库账号
    private final String USERNAME = "root";
    //定义数据库密码
    private final String PASSWORD = "root";
    //访问的地址
    private final String URL = "jdbc:mysql://localhost:3306/smart_system";
    //定义数据库的连接
    private Connection connection;
    //定义sql语句的执行对象
    private PreparedStatement pStatement;
    //定义查询返回的结果集合
    private ResultSet resultset;

    public mysqlHelper()
    {
        try {
            Class.forName(DRIVER);//注册驱动
            connection = DriverManager.getConnection(URL,USERNAME,PASSWORD);//定义连接
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
    /**
     * 完成对数据库的增删改操作
     * @param sql语句
     * @param 传入的占位符,List集合
     * @return SQL语句执行成功返回true,否则返回false
     * @throws SQLException
     */
    public boolean addDeleteModify(String sql,List<Object>params) throws SQLException
    {
        int result = -1;//设置为
        pStatement = connection.prepareStatement(sql);  //填充占位符
        int index = 1; //从第一个开始添加
        if(params != null && !params.isEmpty())
        {
            for(int i = 0;i<params.size();i++)
            {
                pStatement.setObject(index++,params.get(i));//填充占位符
            }
        }
        result = pStatement.executeUpdate();//执行成功将返回大于0的数
        return  result>0 ? true : false;
    }
   /**
    * 数据库查询操作,返回单条记录
    * @param sql语句
    * @param 传入的占位符
    * @return 返回Map集合类型,包含查询的结果
    * @throws SQLException
    */
    public Map<String,Object> returnSimpleResult(String sql,List<Object>params) throws SQLException
    {
        Map<String, Object> map = new HashMap<String, Object>();
        int index = 1;//从1开始设置占位符
        pStatement = connection.prepareStatement(sql);
        if(params != null && !params.isEmpty()) /*判断参数是否为空*/
        { 
            for(int i = 0;i<params.size();i++) /*循环填充占位符*/
            {
                pStatement.setObject(index++, params.get(i));
            }
        }
        resultset = pStatement.executeQuery(sql);
        /*  将查询结果封装到map集合*/
        ResultSetMetaData metaDate = resultset.getMetaData();//获取resultSet列的信息
        int columnLength = metaDate.getColumnCount();//获得列的长度
        while(resultset.next())
        {
            for(int i = 0;i<columnLength;i++)
            {
                String metaDateKey = metaDate.getColumnName(i+1);//获得列名
                Object resultsetValue = resultset.getObject(metaDateKey);//通过列名获得值
                if(resultsetValue == null)
                {
                    resultsetValue = "";//转成String类型
                }
                map.put(metaDateKey, resultsetValue);//添加到map集合(以上代码是为了将从数据库返回的值转换成map的key和value)
            }
        }
        return map;
    }
    /**
     * 查询数据库,返回多条记录
     * @param sql语句
     * @param 占位符
     * @return list集合,包含查询的结果
     * @throws SQLException 
     */
    public List<Map<String,Object>> returnMultipleResult(String sql,List<Object>params) throws SQLException
    {
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        //填充占位符
        int index = 1;
        pStatement = connection.prepareStatement(sql);
        if(params != null && !params.isEmpty())
        {
            for(int i = 0;i<params.size();i++)
            {
                pStatement.setObject(index++, params.get(i));
            }
        }
        //执行SQL语句
        resultset = pStatement.executeQuery();
        //封装resultset成map类型
        ResultSetMetaData metaDate = resultset.getMetaData();//获取列信息,交给metaDate
        int columnlength = metaDate.getColumnCount();
        while(resultset.next())
        {
            Map<String, Object> map = new HashMap<String, Object>();
            for(int i = 0;i<columnlength;i++)
            {
                String metaDateKey = metaDate.getColumnName(i+1);//获取列名
                Object resultsetValue = resultset.getObject(metaDateKey);
                if(resultsetValue == null)
                {
                    resultsetValue = "";
                }
                map.put(metaDateKey, resultsetValue);
            }
            list.add(map);
        }
        return list;
    }
    /**
     * 应用反射机制返回单条记录
     * @param sql语句
     * @param 占位符
     * @param javabean类,这里我用的是(SmartHome_mysql.class)
     *        javabean,我理解的是一个高度封装组件,成员为私有属性,只能
     *        通过set/get方法赋值和取值
     * @return 泛型
     * @throws SQLException
     */
    public <T> T returnSimpleResult_Ref(String sql,List<Object>params,Class<T> tJavabean) throws Exception
    {
        T tResult = null;
        int index = 1;
        pStatement = connection.prepareStatement(sql);
        if(params != null && !params.isEmpty())
        {
            for(int i = 0;i<params.size();i++)
            {
                pStatement.setObject(index++, params.get(i));   
            }
        }
        resultset = pStatement.executeQuery(sql);
        //封装resultset
        ResultSetMetaData metaData = resultset.getMetaData();//获得列的信息
        int columnLength = metaData.getColumnCount();//获得列的长度
        while(resultset.next())//循环取值
        {
            tResult = tJavabean.newInstance();//通过反射机制创建一个实例
            for(int i = 0;i<columnLength;i++)
            {
                String metaDateKey = metaData.getColumnName(i+1);
                Object resultsetValue = resultset.getObject(metaDateKey);
                if(resultsetValue == null)
                {
                    resultsetValue = "";
                }
                //获取列的属性,无论是公有。保护还是私有,都可以获取
                Field field = tJavabean.getDeclaredField(metaDateKey);
                field.setAccessible(true);//打开javabean的访问private权限
                field.set(tResult, resultsetValue);//给javabean对应的字段赋值
            }
        }
        return tResult;
    }
    /**
     * 通过反射机制访问数据库,并返回多条记录
     * @param sql语句
     * @param 占位符
     * @param javabean,会执行javabean类里面的toString方法
     * @return
     * @throws Exception
     */
    public <T> List<T> returnMultipleResult_Ref(String sql,List<Object>params,Class<T> tJavabean) throws Exception
    {
        List<T> list = new ArrayList<T>();
        int index = 1;
        pStatement = connection.prepareStatement(sql);
        if(params != null && !params.isEmpty())
        {
            for(int i = 0;i<params.size();i++)
            {
                pStatement.setObject(index, params.get(i));
            }           
        }
        resultset = pStatement.executeQuery(sql);
        //封装resultset
        ResultSetMetaData metaData = resultset.getMetaData();//取出列的信息
        int columnLength = metaData.getColumnCount();//获取列数
        while(resultset.next())
        {
            T tResult = tJavabean.newInstance();//通过反射机制创建一个对象
            for(int i = 0;i<columnLength;i++)
            {
                String metaDataKey = metaData.getColumnName(i+1);
                Object resultsetValue = resultset.getObject(metaDataKey);
                if(resultsetValue == null)
                {
                    resultsetValue = "";
                }
                Field field = tJavabean.getDeclaredField(metaDataKey);
                field.setAccessible(true);
                field.set(tResult, resultsetValue);
            }
            list.add(tResult);
        }
        return list;
    }
    /**
     * 注意在finally里面执行以下方法,关闭连接
     */
    public void closeconnection()
    {
        if(resultset != null)
        {
            try {
                resultset.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
				resultset=null;
            }
        }
        if(pStatement != null)
        {
            try {
                pStatement.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
				pStatement=null;
            }
        }
        if(connection != null)
        {
            try {
                connection.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
				connection=null;
            }
        }
    }
}
2、javabean类,用于获取数据库表中的字段值:

package com.js;

import java.io.Serializable;

public class SmartSystemBean implements Serializable {
	private static final long serialVersionUID = 1L;
	/*  数据库字段,更具自己的需要而设置(必须和你数据库中的字段一样,需要查什么,就写什么),并生成set,get,toString方法  */
	private String carNumber;
	private String drivername;
	private int driverAge;
	public String getCarNumber() {
		return carNumber;
	}
	public void setCarNumber(String carNumber) {
		this.carNumber = carNumber;
	}
	public String getDrivername() {
		return drivername;
	}
	public void setDrivername(String drivername) {
		this.drivername = drivername;
	}
	public int getDriverAge() {
		return driverAge;
	}
	public void setDriverAge(int driverAge) {
		this.driverAge = driverAge;
	}
	
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	@Override
	public String toString() {
		return "SmartSystemBean [carNumber=" + carNumber + ", drivername=" + drivername + ", driverAge=" + driverAge
				+ "]";
	}
}
3、测试类:

public class TestServer {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        mysqlHelper mysql = new mysqlHelper();
        String sql = "select * from smart";
//      List<Object> params = new ArrayList<Object>();
//      params.add(1);
        try {
            SmartSystemBean shmysql = mysql.returnSimpleResult_Ref(sql, null, SmartSystemBean.class);
            System.out.println(shmysql);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally
        {
            mysql.closeconnection();
        }
    }
}




封装jdbc——工具类JdbcUtils JdbcUtils工具类 1.为什么要对jdbc技术进行封装为工具类JdbcUtils?有什么好处? 在用java操纵数据库时,每次都要写java连接数据库的代码,一条sql语句伴随着大量连接数据库的java代码,这样会使代码冗余度高,代码的可读性和观赏性都变得很差,如果将通用的代码转换为静态方法—>封装成一个工具类JdbcUtils,这样每次需要什么功能只需要调用相应的方法,既提高了代... 阅读详情

相关推荐

Java使用JDBC连接mysql数据库并封装数据

一、目的:使用JDBC连接数据库,并提供统一的查询入口,返回指定格式的数据。二、工具:1)jdk1.8+(其他版本未测)2)mysql5.73)mysql-connector-java-5.1.40-bin.jar4)java IDE,可以使用eclipse或者idea等,本文演示使用eclipse-Oxygen.2三、过程:java的安装和环境变量配置过程略。mysql的安装和配置过程略。在ec...

yufengxiaxiaop的专栏 4502

MyBatis深入探索:原生API与注解方式实现CRUD操作

1. 别名是为 Java 类型命名一个短名字。它只和 XML 配置有关,用来减少类名重复的部分2. 如果指定了别名,我们的MappperXxxx.xml 文件就可以做相应的简化处理3. 注意指定别名后,还是可以使用全名的4. 举例说明。

业精于勤,荒于嬉 1251

Java Mysql工具类封装

最近突然想到在上家公司封装的Mysql工具类没有保存一份,感觉比较可惜,在网上找了一下,找到一个不错的Mysql工具类封装,在这里记录一下,便于日后查阅。文章看着不错,总结比较全面,推荐给大家。

专注基础架构领域 3450

MyBatis——实现CRUD操作

框架就是一套规范,使用这个框架就要遵守这个框架所规定的约束。框架可以理解为半成品软件,框架封装好了一些冗余,且重用率低的代码。框架做好以后,接下来在它基础上进行开发。常见的框架Java的框架非常的多,每一个框架都是为了解决某一部分或某些问题而存在的。流行的几种框架(解决不同层次问题的)。持久层框架:专注于解决数据持久化的框架。有mybatis,spring,jdbc等等。表现层框架:专注于解决与用户交互的框架。有spring mvc。全栈框架: 能在各层都给出解决方案的框架。

qq_43408367的博客 623

JDBC 数据库连接全解析:从驱动配置到工具类封装

后缀properties的文件是一种属性文件。这种文件以key=value格式存储内容Java中可以使用Properties工具类来读取这个文件项目中会将一些配置信息放到properties文件中,所以properties文件。

艺杯羹的博客 9321

java连接mysql数据库的三个不同的工具类

收集了3个不同的连接数据库的类,很经典的封装好的jdbc工具类

数据库CRUD增删改查操作,使用封装类的思想实现

java数据库增删改查CRUD(封装思想),伴随程序员一生的封装思想 项目结构如下:lib是放第三方库的文件夹 jdbc连接数据的步骤: 1、图片导入第三方jar包; 2、图片右键编译jar包; 3、图片注册驱动类; 4、图片建立连接; 5、图片写SQL语句; 6、图片创建Statement对象; 7、图片执行SQL语句,得到ResultSet结果集; 8、图片关闭IO流,close(); 图片以上的步骤缺一不可,并且除了第5、第6的顺序可以颠倒之外,其他的顺序不可颠倒,必须严格要求按照步骤执行,缺任一步

weixin_45708563的博客 433

Arduino蜂鸣器播放《Astronomia》:从乐谱到代码的嵌入式音乐实现

在嵌入式系统开发中,通过编程控制硬件执行特定任务是核心基础。其原理在于利用微控制器生成精确的时序和频率信号,驱动执行器(如蜂鸣器、电机)完成预定动作。这项技术的价值在于实现了软件逻辑与物理世界的直接交互,是物联网设备、智能硬件开发的基石。常见的应用场景包括电子玩具的音效生成、报警器设计以及交互式艺术装置。本文以热门歌曲《Astronomia》的播放为例,具体展示了如何运用Arduino的`tone()`函数和数组数据结构,将抽象的乐谱转化为可执行的频率与延时控制代码,完整呈现了从**核心硬件解析**到**软

weixin_29796279的博客 348

CRUD增删改查,MySql Druid简化代码封装增删改查

一个javaBean,一个封装好增删改查的逻辑操作(工具类可以供多个JavaBean使用),一个Dao接口,是对应实体类的增删改查,一个实现类,继承工具类,同时实现Dao接口。一套JDBC连接数据库的增删改查就封装好了使用三个第三方Jar包,其中QueryRunner类简化了代码的书写,使用这个类可以直接调用封装好的增删改查逻辑,传入数据源在查询的时候无须手动管理数据池里的连接,如需要事务处理,可以直接传入Connection数据库连接手动管理。

qq_63749263的博客 212

SAP PP模块 MRP配置实战:5步完成工厂级物料需求计划激活

本文详细介绍了SAP PP模块中物料需求计划(MRP)的工厂级配置实战,通过5个关键步骤从基础环境准备到最终激活。内容涵盖SPRO后台配置、MRP控制者定义、主数据设置及核心参数调整,帮助顾问快速掌握MRP配置清单的完整流程,确保物料需求计划的高效运行。

weixin_30431445的博客 342

LabVIEW+数据库应用系列保姆级教程,第二篇增删查改

2021-7-2 先挖好坑

wwplh5520370的博客 7362

JAVA 数据库操作工具类----mysql

封装了一个JAVA操作mysql的工具类,如果有需要的,可以直接使用。1、MysqlHelper类,包括对数据库的CRUD操作,其中查询有单记录返回和多记录返回。另外,我使用了反射封装类,希望和大家多多交流。/** * 数据库操作类,包括增删改查 * @author yangliucheng * @serialData 2015-3-25 * @category class of mysql

Mr.yang 9547

Clock Gating设计陷阱:为什么你的ICG cell总是导致setup violation?(附解决方案)

本文深入分析了数字IC设计中ICG(Integrated Clock Gating)单元导致setup时序违规的常见问题,包括时钟偏斜和数据路径过长两大核心原因。通过量化分析影响因素,提供了逻辑重组、寄存器重定时等优化策略,并介绍了预防性设计方法和物理实现阶段的优化技巧,帮助工程师有效解决ICG相关的setup violation问题。

weixin_29168153的博客 205

JDBC数据库的封装

文章目录1. 创建一个新项目2. 编写用户类User3. 编写工具类DBUtil4. 数据库操作的封装5. 编写控制台菜单 1. 创建一个新项目 在IDEA中新建一个Java Web项目 在项目中导入MySQL的jar包 打开数据库,新建一个数据库java7,在数据库中新建一个表tb_user 初始化表 2. 编写用户类User 对用户的属性进行封装 编写get和set方法 编写构造...

qq_38603111的博客 353

linux操作系统使用以太网连接ubuntu,设置固定ipv4

首先,您需要确定要配置的网络接口。可以使用ifconfig -a或ip addr命令来列出当前系统上的所有网络接口及其相关信息。找到您要配置的网络接口名称,例如eth0、ens33或enp0s3;保存并关闭文件后,您需要重启网络服务以使更改生效。在linux操作系统中,要使用交换机连接以太网可以直接使用交互界面;如果你的操作系统没有交互界面,你可以使用命令方式配置;点击ipv4,方式为手动,可以设置ip和子网了;开头,后接网络接口名称。第三步:点击有线最右边圆形控件;第二步:点击有线设置;

2301_79311842的博客 2404

2025年前端框架全景解析:React、Vue、Angular的生态与未来之争

前端框架的竞争本质是工程哲学的分野:React的灵活、Vue的简洁、Angular的严谨,分别对应不同场景需求。

科技D人生 4843

JDBC工具类封装(mysql)

一、导入连接数据库的jar包 mysql-connector-java-5.1.6.jar,放至WEB-INF/lib目录下 当前项目右击===>Properties(属性)===>Java Build Path===>Libraries===>Add JARs... 二、新建配置文件db.properties #用于注释 #该文件封装链接数据库的属性,如果需要更...

Sqwu(qq_38900784)的博客 271

【零基础入门unity游戏开发——unity通用篇12】导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 760

java操作MySQL封装工具类JDBCUtils

工具类的封装:以数据库的操作为例 需导入jar包:mysql-connection-mysql,druid,JDBCTemplate,redis(可选) 如果是maven项目,导入jar包如下: pom.xml <!--连接MySQL数据库--> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId&gt

chenHARDEN的博客 1197

第4章-07-将WebDriver获取的Cookie传递给Requests

在使用Selenium WebDriver获取了浏览器的Cookies之后,你可以将这些Cookies传递给requests库,以便在后续的HTTP请求中使用这些Cookies。这样做可以让你模拟浏览器会话,使得请求看起来像是从之前使用Selenium WebDriver控制的浏览器发出的。

黑夜开发者的博客 692

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JAVA读取Excel数据写入Mysql数据库And取数据库数据写入Excel

一、创建数据库,创建数据库表,添加数据 本文章数据库名为test,数据库表为student 二、创建MAVEN项目 不细说省略 三、在pom文件添加所需jar包 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jx...

weixin_45512495的博客 566

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

JAVA中自己封装JDBC工具类

零、码仙励志 朋友和我说:人都是逼出来的。我经过深思熟虑,觉得很有道理。 一、前期准备 首先创建一个Dynamic Web Project 工程 jdbc ,接着创建俩个包和一个文件db.properties,然后导入MySQL驱动类。 新建工程和导入驱动我这里就不介绍了,不会的看下面这篇文章 JAVA中的JDBD(MYSQL) 下面是我的工程截图,可以按照我的来 二、创...

秦哥的博客 4459

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java对MySQL数据库的封装工具类

在Java中,针对MySQL数据库的封装工具类通常用于简化数据库操作,避免重复编写JDBC代码,提高开发效率和代码可维护性。以下是一个典型的针对MySQL数据库封装的工具类示例,包括数据库连接、查询、插入、更新、删除等常用操作。首先,我们需要一个数据库连接工具类,这个工具类负责获取数据库连接并释放资源。 2. 封装JDBC操作工具类 接下来,我们需要一个封装常见CRUD操作(增、删、改、查)的工具类。 3. 处理查询结果的 接口 由于查询操作返回的结果可能是不同的类型,我们可以通过一个接口来处理查询结果的

cheng_ji的专栏 665

Java之web项目中下拉框的封装

//第一步:封装公共的vo package com.gx.vo; public class DropDownFrame { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public St...

程序羊的博客 2894

MySQL使用的封装工具(Java)

MySQL使用的封装工具(Java)在写Java项目时,经常要使用数据库,每次写数据库操作都很繁琐,于是我就想在网上找找有没有大神封装好的工具类,发现找不到满意的,最后就自己写了一份比较简单的封装。

op123355569的博客 1335

node.js 数据库操作工具类封装

背景 node.js操作对数据库的操作,目前只了解了mysql和oracledb两个模块对数据库的操作代码,它们的用法稍有不同。相比oracledb,node.js的mysql模块相对容易些,本文将整理这两种数据库的通用方法,完成简单SQL语句的执行。 此外,node.js操作数据库的过程跟Java的JDBC也有很大差异。最明显的一点是node.js的数据库模块通过回调函数来处理数据库请求,而且从...

本博客纯属个人网络笔记,如对阁下有用,甚喜;否则,关掉即可,不喜勿喷。专心写代码,不做键盘侠! 3060
上一篇: Java进阶知识
下一篇: JavaScript实用代码
Yes_JiangShuai
博客等级 码龄10年 149粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值