04 JDBCUtil

news/2024/5/19 0:27:44 标签: jdbc, mysql, 数据库

静态代码块加载properties配置文件,注册驱动
静态方法创建连接
静态方法关闭,一个方法关connection,statement,另一个方法多关一个resultSet

package com.aistart.tech.until;

import java.io.IOException;
import java.sql.*;
import java.util.Properties;


public class JDBCUtil {

    public static final Properties info = new Properties();

    static {
        try {
            info.load(JDBCUtil.class.getClassLoader().getResourceAsStream("com/aistart/tech/config/jdbc.properties"));
            Class.forName(info.getProperty("driver"));
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public static Connection getConnection() throws SQLException {

        //获取配置中的url
        String url = info.getProperty("url");
        //获取用户和密码
        String user = info.getProperty("user");
        String password = info.getProperty("password");


        Connection connection = null;

        if (connection==null){

        connection = DriverManager.getConnection(url,user,password);

        }


        return connection;
    }

    public static void closeAll(Connection connection, Statement statement){
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }

        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }

    public static void closeAll(Connection connection, Statement statement, ResultSet resultSet){

        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
       closeAll(connection,statement);

    }


}

创建Map,键代表字段别名
把id传入占位符中执行sql
获取元数据的列数,根据列数循环获取每列的别名及相应的值,put到Map中

//根据id获取一行内容
public Map<String, Object> getEmpInfoById(int id) {
        Map<String, Object> map = new HashMap<>();
        Connection connection  =null;

        PreparedStatement preparedStatement = null;

        ResultSet resultSet = null;

        try {
           connection = JDBCUtil.getConnection();

            preparedStatement = connection.prepareStatement("select e.last_name as emp_name,job_title from employees e left join jobs j on e.job_id = j.job_id\n" +
                    "where employee_id =? ");

            preparedStatement.setInt(1,id);
             resultSet= preparedStatement.executeQuery();

            //获取结果的列信息,元数据
            ResultSetMetaData metaData = resultSet.getMetaData();

            //获取总共有几列
            int columnCount = metaData.getColumnCount();


            if (resultSet.next()){

            for (int i = 1; i <= columnCount ; i++) {
                //是对应数据库表中原本的列名
                String columnName = metaData.getColumnName(i);
                //返回的table中名字(如果取别名,拿到就是别名)
                String columnLabel = metaData.getColumnLabel(i);


                map.put(columnLabel,resultSet.getString(columnLabel));
//                map.put()

            }

            return map;
            }


        } catch (SQLException e) {
            throw new RuntimeException(e);
        }finally {
            JDBCUtil.closeAll(connection,preparedStatement,resultSet);
        }
        return null;
    }



 @Test
    public void empTest(){
         Map<String, Object> empInfoById = iEmpDao.getEmpInfoById(100);

         System.out.println(empInfoById.get("emp_name"));
         System.out.println(empInfoById.values());
     }

http://www.niftyadmin.cn/n/5441382.html

相关文章

数据库系统概论(超详解!!!) 第四节 关系数据库标准语言SQL(Ⅰ)

1.SQL概述 SQL&#xff08;Structured Query Language&#xff09;结构化查询语言&#xff0c;是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言 SQL的动词 基本概念 基本表 &#xff1a;本身独立存在的表&#xff1b; SQL中一个关系就对应一个基本表&am…

python数据分析和可视化【3】体检数据分析和小费数据分析

文章目录 体检数据分析小费数据分析 体检数据分析 要求&#xff1a; &#xff08;1&#xff09;读取testdata文件&#xff0c;利用agg函数统计数据中‘淋巴细胞计数’的和与均值、‘白细胞计数’的和与均值。 &#xff08;2&#xff09;统计不同性别人群的血小板计数 &#xf…

媒体宣传的重要性,企业如何做好全年的宣传规划

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传的重要性 媒体宣传在现代社会中具有举足轻重的地位。它不仅是企业、品牌和产品与消费者之间沟通的桥梁&#xff0c;还是塑造企业形象、提升品牌知名度和影响力的关键手段。媒体…

计算机三级——网络技术(综合题第二题)

路由器工作模式 用户模式 当通过Console或Telnet方式登录到路由器时&#xff0c;只要输入的密码正确&#xff0c;路由器就直接进入了用户模式。在该模式下&#xff0c;系统提示符为一个尖括号(>)。如果用户以前为路由器输入过名称&#xff0c;则该名称将会显示在尖指号的前…

nginx反代后java的request.getScheme获取不到https的解决办法

在实际应用中&#xff0c;经常会用到nginx反向代理应用&#xff0c;这中就会出现一中情况&#xff0c;访问https页面Java 通过request.getScheme()获取不到https协议&#xff0c;或者response.sendRedirect重定向是http&#xff0c;而不是我们想要的https。 问题原因 经过反代…

HarmonyOS(鸿蒙)应用开发——(一)

目录 1 创建hellopro项目 2 了解ArkTS 3 了解ArkTS的组件 4 组件介绍 4.1 常用基础组件&#xff1a; 4.1.1 Text 4.1.2 Button 4.1.3 TextInput 4.2 容器组件 4.2.1 Column 4.2.2 Row 5 案例——实现一个简易登录页面 5.1 在实现预览效果之前&#xff0c;我们…

webpack从零开始搭建vue项目

webpack一步一步搭建vue项目 前提&#xff1a;node、git(可选)已安装。node我使用的版本是 16.13.1。本文基本上都是基础配置&#xff0c;更多特殊配置请看其他博客。 本项目包含内容&#xff1a; webapck vue sass postcss babel eslint typescript 项目源码地址&#xff1…

springcloud-Eureka注册中心

如果你要理解这个技术博客博客专栏 请先学习以下基本的知识&#xff1a; 什么是微服务什么是服务拆分什么是springcloud Springcloud为微服务开发提供了一个比较泛用和全面的解决框架&#xff0c;springcloud继承了spring一直以来的风格——不重复造轮子&#xff0c;里面很多的…