Day4--jdbc学习代码简记(泛型返回方法)

Day54 JDBC JDBC:SUN公司提供的一套操作数据库的标准规范,就是使用Java语言操作关系型数据库的一套APIJDBC与数据库驱动的关系:接口与实现的关系jdbc的工作模式图。 阅读详情
import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.Properties;

/**
 * @author nanzhi
 * @date 2024/7/18 10:45
 */
public class druid {
    public static Connection conn;
    public static PreparedStatement stmt;
    public static FileInputStream inStream;
    public static DataSource dataSource = null;

    /**
     * 创建连接
     */

    static {
        Properties properties = new Properties();
        try {
            inStream = new FileInputStream("src/jdbc.properties");
            properties.load(inStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            dataSource = DruidDataSourceFactory.createDataSource(properties);
            inStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            conn = dataSource.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }


    /**
     * 预处理
     */
    public static PreparedStatement getStmt(String sql, Object... parameters) throws SQLException {
        stmt = conn.prepareStatement(sql);
        ParameterMetaData parameterMetaData = stmt.getParameterMetaData();
        int count = parameterMetaData.getParameterCount();
        if (count != 0 && parameters != null && parameters.length == count) {
            for (int i = 0; i < count; i++) {
                stmt.setObject(i + 1, parameters[i]);
            }
        }
        return stmt;
    }

    /**
     * 增加、删除、更新操作
     */
    public static void cru(String sql, Object... obj) throws SQLException {
        getStmt(sql, obj);
        int i = stmt.executeUpdate();
        //截取表名
        String table = sql.split(" ")[0];
        System.out.print(table + "->");
        System.out.println("影响了" + i + "行数据");
    }

    /**
     * 查询操作
     */
    public static <T> void select(String sql, Object... obj) throws SQLException, ClassNotFoundException, NoSuchFieldException, InstantiationException, IllegalAccessException {
        getStmt(sql, obj);
        ResultSet rs = stmt.executeQuery();
        ResultSetMetaData metaData = rs.getMetaData();
        //截取表名
        String table = sql.split(" ")[3];
        //获取反射对象
        Class cls = Class.forName(table);
        ArrayList<T> data = new ArrayList<T>();
        int count = 0;
        while (rs.next()) {
            T t = (T) cls.newInstance();
            for (int i = 1; i <= metaData.getColumnCount(); i++) {
                // 获取列值
                Object value = rs.getObject(i);
                if (value != null) {
                    // 获取列名
                    String columnName = metaData.getColumnName(i);
                    // 获取泛型对象的字段
                    Field f = cls.getDeclaredField(columnName);
                    // 设置字段可访问
                    f.setAccessible(true);
                    // 将列值设置到泛型对象的字段中
                    f.set(t, value);
                }
            }
            // 将泛型对象添加到结果列表中
            data.add(t);
            count++;
        }
        for (T item : data) {
            System.out.println(item);
        }
        System.out.println("查询了" + count + "行数据");
    }


    public static void main(String[] args) throws SQLException, NoSuchFieldException, ClassNotFoundException, InstantiationException, IllegalAccessException {
//        cru("delete from student where sno=5");
        select("select * from student");

    }
}

这里定义好表中的属性信息后就可以用Ptg插件生成的javaBean信息


public class student {
    private Integer sno;
    private String name;
    private String sex;
    private Integer age;
    private String major;

    public student() {
    }

    public student(Integer sno, String name, String sex, Integer age, String major) {
        this.sno = sno;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.major = major;
    }

    /**
     * 获取
     * @return sno
     */
    public Integer getSno() {
        return sno;
    }

    /**
     * 设置
     * @param sno
     */
    public void setSno(Integer sno) {
        this.sno = sno;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return sex
     */
    public String getSex() {
        return sex;
    }

    /**
     * 设置
     * @param sex
     */
    public void setSex(String sex) {
        this.sex = sex;
    }

    /**
     * 获取
     * @return age
     */
    public Integer getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(Integer age) {
        this.age = age;
    }

    /**
     * 获取
     * @return major
     */
    public String getMajor() {
        return major;
    }

    /**
     * 设置
     * @param major
     */
    public void setMajor(String major) {
        this.major = major;
    }

    public String toString() {
        return "student{sno = " + sno + ", name = " + name + ", sex = " + sex + ", age = " + age + ", major = " + major + "}";
    }
}
【WEEK7】 【DAY4】JDBC—Statement Object【English Version】 Following。 阅读详情

相关推荐

Brainstorm简单分析近红外数据(fNIRS)(一)

Brainstorm分析fNIRS数据

weixin_43604817的博客 1350

学习日志day21(2021-08-06)(1、泛型类和泛型方法 2、反射)

学习内容:学习JDBC(Day21) 1、泛型类和泛型方法 2、反射 1、泛型类和泛型方法

huzige_的博客 223

华为云Stack应急预案实战:从IaaS到PaaS的故障场景与恢复指南

本文详细解析华为云Stack应急预案在IaaS到PaaS层的故障场景与恢复实践,涵盖计算节点故障、存储链路中断等典型问题。通过标准化操作流程和实战案例,帮助企业在突发故障时快速恢复业务,确保高可用性。华为云Stack的应急预案体系经过金融、政务等严苛场景验证,恢复时间指标(RTO)控制在30分钟以内。

weixin_33724059的博客 373

Day5_1--jdbc学习代码简记(重点:多种返回类型的查询的实现)

当方法的返回类型是泛型是一般需要给传入jabean类对象的反射类,在其他类型方法中就不用传入反射类。在Day学习的代码中写的泛型方法中没有传入反射类是因为我通过截取sql语句然后获取反射类了。

gitee_nanzhi66的博客 360

Android 白名单保活实战:主流厂商适配指南

本文详细解析了Android应用白名单保活的实战策略,重点针对华为、小米、OPPO、vivo等主流厂商的系统特性,提供了精准的后台设置页面跳转适配方案。文章从基础的前台服务实现讲起,深入讲解了白名单的判断、申请与厂商适配的核心代码与避坑指南,旨在帮助开发者合规、稳定地提升应用后台存活率。

motor的博客 1860

树莓派4B+DroneKit实战:手把手教你用Python控制无人机飞行(附避坑指南)

本文提供了一份详尽的树莓派4B与DroneKit配置实战指南,涵盖从硬件选型、软件环境搭建到Python编程控制无人机的完整流程。文章重点解决了ARM架构下的兼容性问题、MAVLink通信配置及端口管理等常见难题,并附带了实用的避坑指南和代码示例,帮助开发者构建稳定可靠的无人机控制系统。

weixin_29056781的博客 410

Day4_JDBC——BaseDao类的优化

一. 分析 由上一篇Day3_JDBC——使用DBUtils第三方工具完成增删改查的封装(BaseDao类)可知,BaseDao类中的每一个方法,都需要传入一个实体类的类型(即JavaBean类型)。假如我们在继承BaseDao类的时候,直接告诉BaseDao的构造器我的实体类的类型,这样就再也不用在方法里面传入一个实体类的类型。 二. 例子 本项目的目录结构如下: BaseDao2.java ...

Android_la的博客 220

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案)

2025年全国青少年信息素养大赛初赛真题(算法创意实践挑战赛C++初中组:文末附答案)

王老师青少年编程 3392

Java学习Day10——JDBC

1. 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成2. ResultSet对象保持一个光标指向其当前的数据行。最初,光标位于第一行之前3. next方法将光标移动到下一行,并且由于在ResultSet对象中没有更多行时返回false ,因此可以在while循环中使用循环来遍历结果集1. Statement对象 用于执行静态SQL语句并返回其生成的结果的对象2. 在连接建立后需要对数据库进行访问,执行命名或是SQL语句,可以通过Statement [存在SQL注入]

Flipped_275的博客 1016

姿态传感器/陀螺仪之LSM6DS3TR-C应用原理图设计

LSM6DS3TR-C是一款由意法半导体(STMicroelectronics)推出的高性能、低功耗的惯性测量单元(IMU),集成了3轴加速度计和3轴陀螺仪,用于测量加速度、角速度以及设备的姿态和运动。

corlin6688的博客 870

槽型光电开关传感器原理图设计,已量产(光电传感器)

在嵌入式设备的位置限位、物料计数等场景中,槽型光电开关是性价比极高的传感器方案 —— 它通过遮挡发射器与接收器之间的光路实现电平切换,电路简单且抗干扰性优于漫反射式光耦。今天分享一个实际项目中落地的槽型光电开关检测电路,从器件选型到逻辑设计都做了简化适配,适合小批量原型或低成本产品的需求。

不脱发的程序猿 714

学习笔记day04(反射、泛型、序列化)

一、反射 1.什么是反射? 将类的各个部分封装成其他对象,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制 2.java代码在计算机中会经历三个阶段 源代码阶段:java文件经过编译在硬盘中生成字节码文件 如Student.class 类对象阶段:通过类加载器将class文件中的成员变量、构造方法、成员方法加载到内存中 运行时阶段:可以创建对象和调用对象里的方法了 ..

qq_43621789的博客 256

【ACP】2025-最新-疑难题解析- 练习一汇总

他们对您的方案比较满意,作为一个特别看重用户体验的创业公司,他们有一个比较担心的问题:在后端云服务器 ECS 实例相对空闲时,可能会触发减少 ECS 实例的伸缩活动,这时候运行在即将移出伸缩组的 ECS 实例上的应用会被终止,那么发起这些应用的用户的体验会变差。:在使用阿里云的负载均衡 SLB 实例时,做了如下健康检查的配置:响应超时时间为 5 秒,健康检查间隔为 2 秒,不健康阈值为 3,健康阈值为 3,即对于确认一个后端服务器 ECS 实例是健康的,需要连续三次得到正常响应。以下说法哪一项是正确的?

jundao1997的专栏 324

JAVAWEB学习总结,DAY4(JDBC1)

JDBC 概念:Java Data Base Connectivity(Java数据库连接):是java访问数据库的标准规范 作用:JDBC是用于执行SQL语句的Java API(Java语言通过JDBC可以操作数据库) 扩展:项目里创建文件, lib文件夹作用是存放驱动包文件 bean文件夹作用是存放封装类,封装数据 utils文件夹作用是存放工具类,一般在工具类类名后面加上Utils 文件名.properties文件是存放配置 Ø 首先:导入数据库驱动包 在modules创建一个文件夹:lib 把jar

qq_45198723的博客 384

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

day01JDBC课堂笔记

该笔记是黑马JDBC课程笔记,仅为了方便学习上传,请勿商用。 文章目录1. 今日内容2. JDBC:1. 概念:2. 快速入门:3. 详解各个对象:1. DriverManager:驱动管理对象2. Connection:数据库连接对象3. Statement:执行sql的对象4. ResultSet:结果集对象,封装查询结果5. PreparedStatement:执行sql的对象3.抽取JDB...

H.千面的博客 638

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

day26--JDBC

在开发中我们使用的是java语言,那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。Statement对象的作用就是用来执行SQL语句。而针对不同类型的SQL语句使用的方法也不一样。执行DDL、DML语句执行DQL语句该方法涉及到了ResultSet对象,而这个对象我们还没有学习,一会再重点讲解。封装了SQL查询语句的结果。ResultSet executeQuery(sql) :执行DQL 语句,返回 ResultSet 对象那么我们就需要从ResultSet。

ZHUSHANGLIN的博客 1203

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

数据库 学习 day4 : JDBC的使用

1.JDBC是什么 通过java代码连接数据库并对数据库进行操作的一种方式 我们之前学习MYSQL时,为了使用MYSQL服务,我们通常要使用客户端与MYSQL服务进行连接,然后才能输入SQL语句进行数据库的各种操作。客户端有命令行与图形界面2种。 但是在更多的环境下,由我们人直接操作数据是很低效的,比如双11这种业务场景下,一秒中往往要在库中生成上千万甚至几亿条数据,靠人来手工操作是不现实的,只能依赖于程序进行这种高并发的操作。 程序语言有多种,比如Java、Python、C/C++等,程序语言如果

whosedad的博客 1068

JavaWeb-21 JDBC(泛型,注解,Servlet3.0,Log4j)

JavaWeb-21 泛型,注解,Servlet3.0,Log4j 今天任务: 1、泛型概述 2、Dao模式下泛型的引入 3、注解及反射注解 4、Servlet3.0 5、Log4j(明白怎么用,就够) 一、了解泛型 1、了解泛型: GenericTestDemo1.java package com.itheima.generic; /** * 泛型类中

faith_yee的专栏 1305

JDBC day01

JDBC day01 1 JDBC引言 1.1 JDBC简介 JDBC(Java DataBase Connectivity) :Java数据库连接技术:具体讲就是通过Java连接广泛的数据库,并对表中数据执行增、删、改、查等操作的技术。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PmL8NHSH-1631064881911)(JDBC day01.assets/image-20210513140744246.png)] 此前我们学习过SQL后,可以通过 Navicat、

qq_45618899的博客 358

Day6: JDBC

Day6: JDBC一. JDBC的测试代码二. JDBC代码解析三. JDBC代码的封装3.1 提取工具类3.2 增删改3.3 查询四. SQL的注入问题五. PreparedStatement对象5.1 增删改5.2 查询 JDBC:是SUN公司为了简化开发人员对数据库的统一操作,提供的java操作数据库的规范。 一. JDBC的测试代码 编写java代码的步骤: step1: 加载驱动; step2: 连接数据库(DriverManager.getConnection),设置用户信息和url;

qq_37333048的博客 724

【WEEK7】 【DAY4】JDBC—statement对象【中文版】

10.2.1.1.Jdbc中的statement队形用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。10.2.1.2.Statement对象的executeUpdate方法,用于向数据库发送增、删、改的SQL语句,executeUpdate执行结束后,将会返回一个整数(显示这些增删改语句导致了数据库中几行数据发生了变化)

2401_83329143的博客 891

Day4 JDBC进阶

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。

m0_73859632的博客 1983

day4-mysql-JDBC

day4:JDBC JDBC 规范定义接口 JDBC是访问数据库的标准和规范,访问数据库只需要调用JDBC中的接口与方法,数据驱动由数据库厂商提供 好处: 开发访问数据库的程序,只需要调用JDBC借口的方法即可,不关注类是如何实现的. 使用同一套 Java 代码,进行少量的修改就可以访问其他 JDBC 支持的数据库 核心API 接口或者类 作用 DriverMana...

weixin_38255444的博客 166

数据库学习记录 Day2(JDBC)

Day 2 2019年7月6日。 这是我学习数据库的第二天。 这一天,我学到了以下的知识。 JDBC简介 JDBC(Java Database Connectivity) JDBC的流程 加载驱动 获取与数据库的链接 获取用于向数据库发送sql语句的statement 向数据库发sql,并获取代表结果集的resultset 取出结果集的数据 关闭链接,释放资源 示例如下: import jav...

赈川 558

JDBC基础使用

JDBC基础入门

喵酱 458

Day7_9 Java学习之JDBC访问MySQL数据库

解析:1.JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。

weixin_43717536的博客 1424
上一篇: Day3--实现从数据库获取数据完成登录账号密码验证案例
下一篇: Day5_1--jdbc学习代码简记(重点:多种返回类型的查询的实现)
IT ·南栀
博客等级 码龄6年 415粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT ·南栀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值