JDBC中的接口PreparedStatement的用法

weblogic 集群搭建,双机部署,相关问题记录 4.5.集群搭建1 参考网址https://wenku.baidu.com/view/76365129cd1755270722192e453610661ed95aa4.html IP地址 端口 角色 192.168.1.160 9001 AdminServer ... 阅读详情

一.PreparedStatement 概述

PreparedStatement继承于Statement,并与之在两方面有所不同:

1、PreparedStatement 在被conn实例化时就已加载 SQL 语句,这就是使语句“准备好”。

2、包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。而是该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该SQL语句执行之前(比如stmt.executeUpdate之前)通过适当的setXXX 方法来提供。如:

    String  sql = "select * from people p where p.id = ? and p.name = ?";
    PreparedStatement  ps = conn.prepareStatement(sql);
    ps.setInt(1 , 1001);  //表示第1个问号处以1001代替
    ps.setString(2,”LiMing”);   //表示第2个问号处以字符串”LiMing”代替
    ResultSet rs = ps.executeQuery( );

3、PreparedStatement 继承了 Statement 的所有功能。同时,三种方法 execute、 executeQuery 和 executeUpdate 已被更改,以使之不再需要参数,不需要再像Statement对象执行这三个方法时那样在括号里加载SQL语句。第1条说了,在实例化时已经加载过了。

4、由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。因此,多次执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。

 

二.PreparedStatement在java中常用数据库操作 
1 引用特定的包  
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 

2 一般实例化一个PreparedStatement和结果集 
PreparedStatement prepstmt = null; 
ResultSet rs = null; 

3 得到SQL语句 
conn 为Connection类型 
prepstmt = conn.prepareStatement(String StrSQl); 

4 执行SQL,得到结果集  
ResultSet  rs = prepstmt.executeQuery();


三.一些具体用法

 

1、创建 PreparedStatement 对象

 

以下的代码段(其中 con 是 Connection 对象)创建包含带两个 IN 参数占位符的 SQL 语句的 PreparedStatement 对象:

 

PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");  

PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");   

 

pstmt 对象包含语句 "UPDATE table4 SET m = ? WHERE x = ?",它已发送给DBMS,并为执行作好了准备。

 

2、传递 IN 参数

在执行 PreparedStatement 对象之前,必须设置每个 ? 参数的值。这可通过调用 setXXX 方法来完成,其中 XXX 是与该参数相应的类型。

例如,如果参数具有Java 类型 long,则使用的方法就是 setLong。setXXX 方法的第一个参数是要设置的参数的序数位置,第二个参数是设置给该参数的值。例如,以下代码将第一个参数设为 123456789,第二个参数设为 100000000:

  pstmt.setLong(1, 123456789);

  pstmt.setLong(2, 100000000);

一旦设置了给定语句的参数值,就可用它多次执行该语句,直到调用clearParameters 方法清除它为止。在连接的缺省模式下(启用自动提交),当语句完成时将自动提交或还原该语句。

如果基本数据库和驱动程序在语句提交之后仍保持这些语句的打开状态,则同一个 PreparedStatement 可执行多次。如果这一点不成立,那么试图通过使用PreparedStatement 对象代替 Statement 对象来提高性能是没有意义的。

利用 pstmt(前面创建的 PreparedStatement 对象),以下代码例示了如何设置两个参数占位符的值并执行 pstmt 10 次。如上所述,为做到这一点,数据库不能关闭 pstmt。在该示例中,第一个参数被设置为 "Hi"并保持为常数。在 for 循环中,每次都将第二个参数设置为不同的值:从 0 开始,到 9 结束。

  pstmt.setString(1, "Hi");

  for (int i = 0; i < 10; i++) {

  pstmt.setInt(2, i);

  int rowCount = pstmt.executeUpdate();

  }

 

3、IN 参数中数据类型的一致性

setXXX 方法中的 XXX 是 Java 类型。它是一种隐含的 JDBC 类型(一般 SQL 类型),因为驱动程序将把 Java 类型映射为相应的 JDBC 类型(遵循该 JDBCGuide中§8.6.2 “映射 Java 和 JDBC 类型”表中所指定的映射),并将该 JDBC 类型发送给数据库。例如,以下代码段将 PreparedStatement 对象 pstmt 的第二个参数设置为 44,Java 类型为 short:

  pstmt.setShort(2, 44);

  驱动程序将 44 作为 JDBC SMALLINT 发送给数据库,它是 Java short 类型的标准映射。

  程序员的责任是确保将每个 IN 参数的 Java 类型映射为与数据库所需的 JDBC 数据类型兼容的 JDBC 类型。不妨考虑数据库需要 JDBC SMALLINT 的情况。如果使用方法 setByte ,则驱动程序将 JDBC TINYINT 发送给数据库。这是可行的,因为许多数据库可从一种相关的类型转换为另一种类型,并且通常 TINYINT 可用于SMALLINT 适用的任何地方

 

 

四.一个完整的PreparedStatement事例

import java.sql.*;  
class MyPreparedStatement{  
    private final String db_driver="com.microsoft.jdbc.sqlserver.sqlserverdriver";  
    private final String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=pubs";  
    public MyPreparedStatement(){ 
          }
    
    public void query() throws SQLException{  
        Connection conn = this.getConnection(); 
        String strsql = "select emp_id from employee where emp_id = ?";  
        PreparedStatement pstmt = conn.prepareStatement(strsql);  
        pstmt.setString(1,"pma42628m"); 
        ResultSet rs = pstmt.executeQuery();  
  
        while(rs.next()){  
             String fname = rs.getString("emp_id");  
             System.out.println("the fname is " + fname);  
        }
        rs.close();  
        pstmt.close();  
        conn.close();  
    }
    
    private Connection getConnection() throws SQLException{   
        Connection conn = null;  
        try {  
             Class.forName(db_driver);  
             conn = DriverManager.getConnection(url,"sa","sa");  
        }catch (ClassNotFoundException ex) {}  
        return conn;
      }

      //main方法
      public static void main(String[] args) throws SQLException {  
            MyPreparedStatement jdbctest1 = new MyPreparedStatement();  
            jdbctest1.query();  
     }
}


自然语言处理:长文本场景下的关键词抽取实践 阅读详情

相关推荐

手把手教你用DLP4500和海康相机搭建双目结构光系统(附完整代码获取路径)

本文详细介绍了如何利用DLP4500投影仪和海康工业相机搭建低成本双目结构光三维测量系统。从硬件选型、软件配置到结构光编码解码实现,再到三维重建全流程,提供了完整的实战指南和优化技巧,帮助用户以不到2万元的预算实现0.05mm精度的三维扫描。

weixin_32447969的博客 316

​如何使用 JDBC PreparedStatement将值列表动态添加到 IN 子句​

带有 IN 子句中参数列表的 JDBC PreparedStatement 示例。考虑我们在数据库中有一个用户表,而数据库用户表中的记录很少。下面的代码创建一个带有多个占位符的动态 SQL 查询?在本文中,我们将讨论如何使用 JDBC。将值列表动态添加到 IN 子句。动态创建一个 SQL 语句。...

allway2的博客 1412

FTPClient使用中,碰到SocketTimeoutException 坑

ftpclient设置soTimeout无效

u010379794的博客 1951

JDBC PreparedStatement 批量查询 in 的实现 方案

我们经常会有这种业务需求,根据一个条件集合去查询一张表的数据,比如:select * from tablename t where t.name in (List <taskids>);在java语言中,我们需要用到JDBC来和数据库打交道,那么在JDBC中该如何处理这种需求呢?我们可以有如下几种处理方式 方案一:写一个函数把参数集合转换成一个or 条件 或 in 条件的字符串,最后拼...

weixin_33720452的博客 1682

别再死记硬背Payload了!深入理解Flask/Jinja2 SSTI的Python对象继承链与魔术方法

本文深入解析Flask/Jinja2 SSTI漏洞的底层原理,从Python对象模型出发,详细讲解如何通过魔术方法链实现RCE。文章揭示了Python对象继承链与魔术方法的精妙设计,提供了防御与绕过SSTI漏洞的实用技巧,帮助开发者深入理解漏洞本质并采取有效防护措施。

weixin_42525738的博客 356

保姆级教程:用Altium Designer 24从零画一块PCB(附完整库文件与避坑清单)

本文提供了一份详细的Altium Designer 24(AD24)PCB设计教程,从工程创建到最终文件输出,涵盖元件库管理、原理图设计、PCB布局布线等全流程。特别适合初学者,包含STM32最小系统板的实战案例,附完整库文件和避坑清单,帮助用户快速掌握AD24的核心功能与技巧。

weixin_27697385的博客 249

使用jdbc连接数据库,如何使用PreParedStatement类实现in的查询

大家都知道PreParedStatement类相比Statement更加方便的实现sql语句的动态赋值问题,虽然Statement也可以采取字符串拼接的方式实现,但代码整体风格看着不舒服,PreparedStatement类由Connect接口获取,同时再sql语句中采用占位符("?")的形式,方便程序员进行数据的赋值。但由此引申一个问题,如何区域查询呢? 大家随便看个sql select ...

专注写bug 9409

零信任架构实战:“持续验证+动态授权”全流程解析(附策略引擎联动图)

《零信任实战指南:7图拆解核心流程与行业案例》摘要:本文通过7张架构图系统解析零信任五大核心流程:强身份认证、设备检查、动态授权、持续监控和自动降权。对比金融(重数据审计)与制造业(重物理绑定)的落地差异,指出三大常见误区及解决方案。数据显示,零信任可使安全响应提速60%,泄露成本降低45%。文章提供6个月实施路线图,强调零信任是"智能信任"体系,建议企业分阶段改造,优先保护核心系统。附赠金融/制造行业策略模板及甘特图示例。(149字)

sara_han的博客 773

JDBC详解(三):使用PreparedStatement实现CRUD操作(超详解)

⭕ 可以通过调用Connection对象的方法获取对象⭕接口是Statement的子接口,它表示一条预编译过的 SQL 语句⭕对象所代表的 SQL 语句中的参数用问号(?)来表示,调用对象的setXxx()方法来设置这些参数。setXxx()方法有两个参数,第一个参数是要设置的SQL语句中的参数的索引(从1开始),第二个是设置的SQL。

weixin_52533007的博客 2087

STM32驱动电磁阀电路设计:从光耦选型到MOSFET驱动的实战解析

本文深入解析了STM32驱动24V电磁阀的完整电路设计,重点探讨了光耦选型与MOSFET驱动两大核心环节。针对电平转换与电气隔离需求,详细对比了EL357N与TLP2310等光耦在CTR、速度及耐压等关键参数上的差异与应用场景。同时,文章提供了MOSFET关键参数解读、驱动电路优化方案(如推挽驱动)以及完整的PCB布局、电源处理与调试避坑指南,旨在帮助工程师构建稳定可靠的工业控制电路。

weixin_29184371的博客 234

破解现代反爬虫:JS加密、OB混淆与CSS反爬的实战攻防分析

摘要: 随着反爬技术的升级,JS加密、OB混淆和CSS反爬成为主流防护手段,阻碍传统爬虫获取数据。本文解析了这些技术的工作原理,并提出破解策略:通过模拟浏览器(如Selenium、Puppeteer)执行动态JS,逆向混淆代码,以及利用开发者工具突破CSS隐藏。针对复杂防护,开发者需结合技术分析与工具应用,如API接口抓取、动态渲染破解等,以应对不断演进的反爬机制。未来,爬虫攻防将持续升级,需保持技术敏锐性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1646

JDBC详解

JDBC是一套协议,是JAVA开发人员和数据库厂商达成的协议,也就是由Sun定义一组接口 接口中定义有一系列方法,但这一系列方法具体实现是有不同的数据库厂商来完成的, JAVA开发人员需要使用不同的参数来访问特定数据库(sql server,mysql,oracle),并

不知道更多久 710

黑猫带你学eMMC协议第26篇:eMMC的硬件复位操作(H/W reset)

本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 文章所在专栏:《黑猫带你学:eMMC协议详解》 1 概述 什么是硬件复位? 硬件复位就是使用一个特殊硬件信号(这个信号在RST_n这根实实在在的物理线路上传输)将emmc复位到pre-idle state,而不需要使用cmd0或者power cycle讲emmc复位到pre-idle state。 如何进行硬件复位? 1、设置RST_n_FUNCTION [162]为1,使emm.

黑猫奥利奥的博客 6316

JDBC之PreparedStatement接口

PreparedStatement接口继承自Statement接口,用于执行含有或不含有参数的预编译的SQL语句,相对于Statement接口,用于执行静态SQL语句,PreparedStatement接口中的SQL语句是预编译的,重复执行的效率会比较高。 创建执行SQL的语句(Statement) Statement与PreparedStatement区别 方式一:Statement...

a3060858469的博客 814

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jdbc 接口的用法 Statement和PreparedStatement的区别!

package cn.zhouzhou; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import com.mysql.jdbc.PreparedStatement; /*一、接口的概念...

weixin_30781433的博客 142

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【三大接口】JDBC:Connection、statement(PreparedStatement)、ResultSet的创建及使用 【整理】

文章目录1、简述JDBC2、Connection接口3、Statement接口4、PreparedStatement接口5、ResultSet接口 1、简述JDBC JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人...

超逸の学习技术博客 5009

Statistics and Machine Learning Toolbox

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

JDBC 之 PreparedStatement 接口

        PreparedStatement 接口继承 Statement,并与之在两方面有所不同:        PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(

火柴天堂的Blog 667

JDBC的PreparedStatement接口

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

cccccccmmm的博客 1747

JDBC中PreparedStatement接口提供的execute、executeQuery和executeUpdate之间的区别及用法

用惯了orm框架,今天在对一个开源项目做扩展的时候,发现个方法放回的数据有问题,debug追到底层jdbc代码,发现有些东西记得不够清楚,特在此记录,温故而知新。 一、方法简介 PreparedStatement接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和 execute。 使用哪一个方法由 SQL 语句所产生的内容决定。 一般的使...

Evan's Blog ٩(๑❛ᴗ❛๑)۶ 3573

JDBC_PreparedStatement 接口

参考:传智播客&黑马程序员 PreparedStatement 接口 继承结构与作用 PreparedStatement 是 Statement 接口的子接口,继承于父接口中所有的方法,它是一个预编译的 SQL 语句。 PreparedSatement 的执行原理 1.因为有预先编译的功能,提高 SQL 的执行效率。 2.可以有效的防止 SQL 注入的问题,安全性更高。 Connect...

duwenyanxiaolaji的博客 428

JDBC(3):PreparedStatement接口

参考资料http://study.163.com/course/courseLearn.htm?courseId=1455026#/learn/video?lessonId=1821070&amp;courseId=1455026 一、Statement接口问题 虽然在JDBC里面提供有Statement接口,但实际来讲,Statement接口存在严重操作缺陷,是不会在工作中使用的 范例:观...

weixin_39855497的博客 290

JDBC-使用PreparedStatement接口实现增、删、改操作

1 PreparedStatement接口 2 使用PreparedStatement接口实现增、删、改操作 代码框架与Statement类似,Book类和DbUtil类一样,只是修改了增、删、改的类 package com.chb.jdcb; import java.sql.Connection; import java.sql.PreparedStatement; import com...

cc098818的博客 336

JDBC核心接口解析:Statement、PreparedStatement与CallableStatement实战

JDBC作为Java连接数据库的标准API,其核心接口Statement、PreparedStatement和CallableStatement是开发者必须掌握的基础技术。这些接口通过SQL预编译、参数绑定等机制,有效解决了SQL注入风险、提升了查询性能。在企业级应用中,合理选择语句类型可显著优化数据库操作效率,特别是在高并发场景下的批处理操作和存储过程调用。通过连接池集成与语句缓存配置,能够进一步降低系统开销。本文结合尚硅谷技术社区实践经验,深入解析三种接口的底层原理、安全防护机制及性能优化方案,帮助开发

weixin_34327223的博客 503

jdbc使用 PreparedStatement 接口实现添加数据操作

jdbc使用 PreparedStatement 接口实现添加数据操作

wang_shuai_long的博客 1171

JDBC中Statement接口和PreparedStatement接口的差异性

Statement:用于执行SQL语句的工具接口。该对象及可以执行DDL/DCL语句,也可以用于执行DML语句,还可以用于执行SQL查询,返回查询到的结果集。常用方法如下:                 ResultSet executeQuery(String sql)throws SQLException:该方法用户执行查询语句,并返回查询结果对应的ResultSet对像。该方法只能用于执

programmer123455的博客 849

jdbc使用 PreparedStatement 接口实现更新数据操作

jdbc使用 PreparedStatement 接口实现更新数据操作

wang_shuai_long的博客 1744
下一篇: Mysql文件大小限制,max_allowed_packet查询和修改,
xtfdc2
博客等级 码龄18年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值