JDBC之preparedStatement

MySQL JDBC为什么都不开启PreparedStatement Cache 同样技术的文章我发现几年前写过一次,^_^:https://blog.youkuaiyun.com/xieyuooo/article/details/10732375 当时写这篇文章更多偏重于内部的代码实现逻辑来写,可能很多朋友看得更多是云里雾里,不知道对自己有什么帮助,最近也有人在问我为什么我们写代码不开启PS Cache,其实从源码确实可以找到答案,不过我觉得用博客写源码分析可能更多是对我自己有帮助,对... 阅读详情

直接贴代码案例,理论知识可以从隔壁看看。

prestmtest.java

package PREPAREDSTAMENT;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.junit.Test;

public class prestmtest {
          String url="jdbc:mysql://localhost:3306/data";
          String user="root";
          String password="123456";
          @Test

          /*
           * 增加
          */
          public  void testInsert(){
            Connection conn=null;
            PreparedStatement pstmt=null;
            //获取链接对象
           try {
            Class.forName("com.mysql.jdbc.Driver");
             conn=DriverManager.getConnection(url, user, password);
                //准备预编译sql语句
             String sql="insert into xxb values(?,?,?)";
             //执行sql
             pstmt=conn.prepareStatement(sql);
             //设置参数


            pstmt.setInt(1, 4);
             pstmt.setString(2, "杨六");
             pstmt.setString(3, "女");
             int count=pstmt.executeUpdate();
             System.out.print("影响了"+count+"行");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException(e);
        } //throw new RuntimeException(e);
           finally{
             if(pstmt!=null)
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
             if(conn!=null)
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
           }
          }
          /*
           * 删除
          */
    public  void testDelete(){
        Connection conn=null;
        PreparedStatement pstmt=null;
        //获取链接对象
     try {
        Class.forName("com.mysql.jdbc.Driver");
         conn=DriverManager.getConnection(url, user, password);
            //准备预编译sql语句
         String sql="delete from xxb where sid=?";
         //执行sql
         pstmt=conn.prepareStatement(sql);
         //设置参数
         pstmt.setInt(1, 4);
         int count=pstmt.executeUpdate();
         System.out.print("影响了"+count+"行");
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        throw new RuntimeException(e);
    } //throw new RuntimeException(e);
     finally{
         if(pstmt!=null)
            try {
                pstmt.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                throw new RuntimeException(e);
            }
         if(conn!=null)
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                throw new RuntimeException(e);
            }
     }
          }

          /*
           * 修改
          */
          public  void testUpdate(){
            Connection conn=null;
            PreparedStatement pstmt=null;
            //获取链接对象
           try {
            Class.forName("com.mysql.jdbc.Driver");
             conn=DriverManager.getConnection(url, user, password);
                //准备预编译sql语句
             String sql="update xxb set sname=? where sid=?";
             //执行sql
             pstmt=conn.prepareStatement(sql);
             //设置参数



             pstmt.setString(1, "张三");
             pstmt.setInt(2, 1);
             int count=pstmt.executeUpdate();
             System.out.print("影响了"+count+"行");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException(e);
        } //throw new RuntimeException(e);
           finally{
             if(pstmt!=null)
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
             if(conn!=null)
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
           }
                }  
          /*
           * 查询
         */
          public  void testQuery(){
            Connection conn=null;
            PreparedStatement pstmt=null;
            //获取链接对象
           try {
            Class.forName("com.mysql.jdbc.Driver");
             conn=DriverManager.getConnection(url, user, password);
                //准备预编译sql语句
             String sql="select *from xxb";
             //执行sql
             pstmt=conn.prepareStatement(sql);
             //遍历
             ResultSet rs=pstmt.executeQuery();
             while(rs.next()){
                 int id=rs.getInt("sid");
                 String name=rs.getString("sname");
                 String gender=rs.getString("sgender");
                 System.out.println(id+" "+name+" "+gender);
             }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException(e);
        } //throw new RuntimeException(e);
           finally{
             if(pstmt!=null)
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
             if(conn!=null)
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    throw new RuntimeException(e);
                }
           }
                }     
}

数据库文件


SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
--  Table structure for `xxb`
-- ----------------------------
DROP TABLE IF EXISTS `xxb`;
CREATE TABLE `xxb` (
  `sid` int(11) default NULL,
  `sname` varchar(20) default NULL,
  `sgender` varchar(20) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records 
-- ----------------------------
INSERT INTO `xxb` VALUES ('1','zhangsan','man'), ('2','lisi','woman'), ('3','wangwu','man');
jdbc中预编译语句PreparedStatement的深层分析 翻阅大大小小的博客,无论中外只要你搜索PreparedStatement这个关键字,得到的大多数结果是在重复执行一条语句多次的情况下PreparedStatement会获得比Statement更好的性能,辟如下文引用的这段文字。 选择PreparedStatement还是Statement取决于你要怎么使用它们. 对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句 阅读详情

相关推荐

从零开始:使用Python实现基于深度强化学习的柔性车间调度系统

本文详细介绍了如何使用Python和深度强化学习(DRL)构建柔性车间调度系统,特别关注图神经网络(GNN)与近端策略优化(PPO)算法的结合应用。通过实战指南,读者将学习从环境准备、异构图构建到PPO算法实现的全流程,最终实现生产效率的显著提升。

weixin_29074295的博客 244

PreparedStatement的使用

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public cla

kiss_vicente的专栏 532

5G R18标准:AI/ML如何重塑空口优化与网络架构

人工智能与机器学习正逐步成为通信网络优化的核心技术。其核心原理在于通过数据驱动模型,从海量网络数据中学习信道变化、用户行为等统计规律,替代传统的基于固定规则的优化方法。这一技术范式能显著提升网络性能与效率,尤其在空口资源管理、干扰协调和能耗控制等场景中价值突出。在5G Advanced(R18)标准化框架下,AI/ML被系统性地引入空口设计,聚焦于信道状态信息反馈增强、波束管理与预测等关键用例。通过定义网络侧AI、终端侧AI及联合学习的标准化接口与流程,R18旨在实现跨厂商设备的智能协同,推动无线网络向自适

weixin_35671843的博客 244

使用preparedStatement来解决sql注入漏洞

使用Statement来执行sql语句,如果语句中连接的有变量,那么可以对变量进行一些修改使绕过sql语句的判断条件。比如: public static boolean login(String username,String password) { Connection conn = null; Statement stmt = null; ResultSet rs = null...

WARGON的博客 1515

大疆sdkV4以及V5webrtc推流

webrtcSDK中要用它的VideoCapturer来初始化推流 ViewdoCapturer是一个接口我们继承它 然后重建创建文件CapturerAircraft.java文件。CameraUtil.java这个是我们用来创建CapturerAircraft的一个工具。除了CapturerAircraft这个文件不一样外其他都是一样的。PlayBodyBean.java这个是我们的配置文件。下面的有个代码块第一个是v4的 第二个是v5的。接着我们来创建几个推流用到的webrtc工具。

weixin_41624865的博客 1188

双向晶闸管交流调压基础知识及Multisim电路仿真

本文介绍了双向晶闸管交流调压电路的工作原理及应用。该电路由双向晶闸管、RC移相电路和双向触发二极管组成,通过调节电位器改变触发角实现电压调节。当电位器阻值减小时,触发角减小,输出电压升高;阻值增大时,触发角增大,输出电压降低。Multisim仿真展示了不同电位器档位下的波形特征:0%档位时全导通,50%档位时半导通,100%档位时基本关断。该电路结构简单、调节平滑,广泛应用于调光、调速等场合,但会产生谐波干扰。

XU157303764的博客 838

PreparedStatement对象解决SQL注入问题----个人学习记录

PreparedStatement对象解决sql注入问题

m0_59771750的博客 2227

红队内网攻防渗透:内网渗透之内网对抗:实战项目&VPC1打靶&PHP-RCE&三层代理路由&防火墙上线&密码喷射&域控提权

上面已经抓取到了密码,但是我们通过拓扑分析看,要想上线win10只能通过正向shell,因为win7的防火墙是开的,win10反向主动连接肯定入站规则拦截,而win10自己没有开防火墙,所以win7主动正向连接就可以上线。win7开启了防火墙,入站规则肯定是会拦截我们的请求的,所以我们需要反向上线,让win7主动来连接我们。这里扫描发现是存在ms17010漏洞的,但是想上线192.168.2.142的话,我们没有路由是上线不了的,这里有两种办法:一种msf直接生成后门,另一种cs移植后门到msf。

HACKONE的博客 909

java培训 | Mybatis 中的 PreparedStatement 预编译

前言 大家都知道,Mybatis内置参数,形如#{xxx}的,均采用了sql预编译的形式,大致知道mybatis底层使用PreparedStatement,过程是先将带有占位符(即”?”)的sql模板发送至mysql服务器,由服务器对此无参数的sql进行编译后,将编译结果缓存,然后直接执行带有真实参数的sql。如果你的基本结论也是如此,那你就大错特错了。 1. mysql是否默认开启了预编译功能? mysql是否支持预编译有两层意思: db是否支持预编译 连接数据库的url是否指定了需要预编译,比

weixin_45695430的博客 766

基于深度学习的图像修复系统,GAN图像修复,图像修复算法研究,并实现系统登录和注册,全网独发

近年来,深度学习已成为计算机视觉领域的研究热点,基于深度学习的图像修复技术弥补了传统修复方法长期存在的不足,显著提高了生成结果的质量。深度学习是指模仿人脑机制设计的具有深层结构的神经网络。深度学习作为一种表征学习,通过模仿人脑神经元之间的信息传递方式来学习输入数据的特征,并找到输入和输出数据之间的映射关系。通过在图像修复中应用深度学习技术,可以准确学习图像的语义信息,然后根据信息预测缺失的内容,大大克服了传统修复算法的不足,使结果更具逻辑性。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 8262

YOLO26涨点改进 | 检测头改进篇 | 利用ASFF改进YOLO26检测头,自适应空间特征融合模块,在所有的目标检测上均有大幅度的涨点效果

本文提出了一种自适应空间特征融合(ASFF)检测头YOLO26,用于解决目标检测中特征金字塔跨尺度特征不一致的问题。ASFF通过学习空间权重图,自适应地融合不同尺度的特征,抑制特征层间的冲突信息。实验表明,该方法在MSCOCO数据集上显著提升了检测精度(45FPS下AP达42.4%),且仅引入极小推理开销。ASFF模块具有可微分性、模型无关性和计算成本低等优势,能够有效改善特征尺度不变性,实现速度与精度的良好平衡。文章详细介绍了ASFF的原理、实现代码及其在YOLO模型中的集成方法。

Ai缝合怪、助力小伙伴高效发论文 553

Javaweb学习笔记之JDBC(二):使用 PreparedStatement 执行带参数的 SQL 语句

package com.demo.jdbc; import com.demo.utils.JdbcUtils; import org.junit.Test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; /** * 使用 PreparedStatement...

秋忆夏伤的博客 3273

增益调度控制 —— 理论、案例与交互式 GUI 实现

本文详细介绍了增益调度控制的基本原理、数学模型及公式推导,探讨了该方法在适应非线性系统和大范围工作条件下的优势与局限。通过航空飞行控制、发动机推力控制以及化工过程控制三个典型案例,我们展示了如何利用调度变量动态调整控制增益,从而使得控制系统在各个工作点均能达到优良性能。为帮助工程师和研究者更直观地理解并验证增益调度控制的实际效果,本文提供了一套基于 Python 与 PyQt6 的交互式 GUI 控制系统代码。用户不仅可以实时查看仿真数据,还能通过在线调节参数直观体验调度控制的优势。

闲人编程的博客 1480

JDBC---PreparedStatement用法详解

一 简介: JDBC的最基本的使用过程 加载驱动类:Class.forName() 获取数据库连接:DriverManager.getConnection() 创建SQL语句执行句柄:Connection.createStatement() 执行SQL语句:Statement.executeUpdate() 释放数据库连接资源:finally,Connection.cl...

silmeweed的博客 4673

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

JDBC-PreparedStatement

通用的查询方法 以面向对象的思想编写JDBC程序 向数据表中插入一条Student记录 新建一个Student,对应examStudents数据表 ​ //流水号 int flowID; ​ //考试类型 int type; ​ //身份证号 String idCard; ​ //准考证号 String examCard; ​ //学生名 String studentName; ​ //学生...

Aqours的博客 270

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JDBC的PreparedStatement接口

继承自 Statement 接口,由 preparedStatement方法创建。PreparedStatement具有预编译SQL语句能力,所以PreparedStatement 对象比 Statement 对象的效率更高,由于实现了动态的参数绑定,所以可以防止 SQL 注入,所以我们一般都使用 PreparedStatement。PreparedStatement执行sql语句的编写顺序:1、获取Connection对象2、编写sql语句。

cccccccmmm的博客 1748

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

MySQL JDBC PreparedStatement

JDBC作为JAVA访问数据库的一套规范与标准,统一了数据库操作的API,大大简化了程序开发工作。不过由于历史原因,MySQL对JDBC默认的实现与规范定义或者说其它数据库如Oracle并不一致,为了更完整记录这些差异,计划抽空写个系列,整理下这些可能会误解的常用功能。第一篇首先聊聊PreparedStatement。 MySQL JDBC PreparedStatement Prepare SQ...

一只努力的微服务 1655

JDBC之创建PreparedStatement

JDBC之创建PreparedStatement创建PreparedStatement动态传参PreparedStatement vs Statement通过PreparedStatement执行sql语句 创建PreparedStatement 通过调用 Connection 对象的 preparedStatement() 方法获取 PreparedStatement 对象;PreparedSt...

zhuzhuxia2020的博客 4274

JDBC的Statement和PreparedStatement的总结

JDBC的Statement和PreparedStatement Statement 和 PreparedStatement之间的关系和区别. 关系:PreparedStatement继承自Statement,都是接口 区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高 Statement可以正常访问数据库,适用于运行静态 SQL 语句。 Statement 接口不接受参数。 PreparedStatement计划多次使用 SQL 语句, Prepared

weixin_43961117的博客 633

JDBC: PreparedStatement和Statement的区别

文章目录1.JDBC设计用户登录2.PreparedStatement和Statemen区别3.PreparedStatement对数据库进行insert、delete、update操作 PreparedStatement注意: (1)sql语句要给占位符?传值(第1个问号下标是1,第2个问号下标是2,JDBC所有下标从1开始。) (2)PreparedStatement与Statement的第四...

JH灰色的博客 370

JDBC的Statement 和 PreparedStatement区别

1. 概念 Java提供了三种用来执行SQL查询语句的API;Statement、PreparedStatement 和 CallableStatement。其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。 Statement继承自Wrapper,一般用于普通的不带参的SQL语句。Statement是不安全的,容易产生SQL注入式攻击。简单理解就是正常的一个SQL语句中添加了一个恶意的SQL语句,

weixin_43808717的博客 553

JDBC的PreparedStatement

JDBC的防注入攻击的程序: package JDBCTest; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class Two { public static void mai...

xinhaowudi的博客 190

JDBC PreparedStatement –创建表

一个JDBC PreparedStatement示例,用于在数据库中创建表。 CREATE TABLE EMPLOYEE ( ID serial, NAME varchar(100) NOT NULL, SALARY numeric(15, 2) NOT NULL, CREATED_DATE timestamp with time zone NOT NULL ...

一名可爱的技术搬运工 1638

JDBC中的PreparedStatement与Statement

Statement 和 PreparedStatement 都是JDBC中用于执行静态SQL语句并返回其生成的结果的对象,他们之间的关系是什么?在使用上有哪些差别?

m0_59555392的博客 358

JDBC中Statement与PreparedStatement的区别

JDBC中Statement与PreparedStatement的区别 PreparedStatement继承自Statement,JDBC提供了Statement、PreparedStatement来执行查询语句。 准备工作 数据库配置文件:config.properties driver=com.mysql.jdbc.Driver url=填上自己数据库的url username=root...

Xechos 407

JDBC PreparedStatement –插入一行

一个将行插入数据库的JDBC PreparedStatement示例。 RowInsert.java package com.mkyong.jdbc.preparestatement.row; import java.math.BigDecimal; import java.sql.*; import java.time.LocalDateTime; public class Row...

一名可爱的技术搬运工 622
上一篇: JDBC案例解析
下一篇: struts2中 ServletActionContext与ActionContext区别
broccoli2
博客等级 码龄10年 404粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值