发现一种超简单的将SQL包装成PrepraredStatement的方法

冒个泡,jSQLBox项目已启动,欢迎有兴趣的加入:https://github.com/drinkjava2/jSQLBox
jSQLBox项目要完成的基本功能有: CRUD方法、 JDBC包装、一级缓存、脏检查、纯JAVA方式配置,配置可动态生成修改。

在jSQLBox编写过程中,刚完成对JDBC的包装,突然发现一种超简单的将SQL包装成PrepraredStatement的方法,利用ThreadLocal将参数暂存,从而将字符串连接的SQL自动包装为PreparedStatement从而实现防SQL注入,提高性能,且不损害SQL的可读性。 这个比较好, 如果软件怎么写也可以申请专利的话,而且以前也没人干过,我得去申请专利了:
public class Tester {
public void tx_insertDemo() {
Dao.dao.execute("delete from user");
Dao.dao.execute("insert user (username,age) values(" + W("user1") + "," + W(10) + ")");
Dao.dao.execute("insert user (username,age) values(" + W("user2", 20) + ")");
Dao.dao.execute("insert user (username,age) values(?,?)" + K("user3") + K(30));
Dao.dao.execute("insert user (username,age) values(?,?)" + K("user4", 40));
Dao.dao.execute(
"insert " + User.Table + " (" + User.UserName + "," + User.Age + ") values(" + W("user5", 50) + ")");
Dao.dao.execute("update user set username=?,address=? " + K("Sam", "BeiJing") + " where age=" + W(50));
User user = new User();
user.setUsername("user3");
user.setAge(40);
user.dao().save(); //TODO
}

public void tx_batchInsertDemo() {
for (int i = 6; i < 100000; i++)
Dao.dao.cacheSQL("insert user (username,age) values(?,?)" + K("user" + i, 60));
Dao.dao.executeCatchedSQLs();
}

public static void main(String[] args) {
Tester tester = BeanBox.getBean(Tester.class);//获取代理实例
tester.tx_insertDemo();//包装在Spring的声明式事务中
tester.tx_batchInsertDemo();
}
}

以上代码实测通过,已上传。 简单说明一下上面代码,User表中只有id, username, address, age四个字段,上例分别用几种不同的SQL写法进行插入和更新,batchInsertDemo方法是包装了JDBC的批量插入,插入10万行数据大约需时1秒。上面代码中W表示将参数暂存在ThreadLocal中并返回问号,K表示返回为空,都是静态引入的方法。如果你还在苦恼于使用JDBC的繁琐,可以借签一下上面的做法。 目前常见的做法是将参数全部放在方法的最后一个参数传入,可读性极差,把set和where的参数写在一起传进去,参数多时很难维护。 上面的做法避免了这一缺点,可以非常灵活地将参数织入到SQL中。
slqmf刀模工具 用于刀模行业,打桥位,转曲等等用处,加快制图速度, 立即下载

相关推荐

十大sql插件

最实用最齐全的插件、建立表结构、日志读取、差异对比、优化顾问、智能提示

SQL Prepare

解释:SQL预处理(Prepare),是一种特殊的 SQL 处理方式;预处理不会直接执行 SQL 语句,而是先将 SQL 语句编译,生成执行计划,然后通过 Execute 命令携带 SQL 参数执行 SQL 语句。本小节,我们将一起学习 SQLPrepare。在生产环境中,我们会多次执行一条 SQL 语句,如果每次都处理该 SQL 语句,生成执行计划,必然会浪费一定的时间。

游游的记事本 1278

SLQ免费刀模插件 V4.0.rar

亲自试验非常好用,SLQ免费刀模插件 V4.0

MySQL预处理语句(PREPARE)和动态SQL

通过存储过程接收一个字符串形式的SQL条件(where后的条件),并将其直接用于SELECT语句的WHERE子句中,使用预处理语句(PREPARE)和动态SQL来实现这一功能。 通过存储过程,将处理结果返回。

六月闻君 1365

完整指南:从基础到高级使用 Semantic Kernel

通过本文的学习,你已经掌握了从基础到高级的使用方法。安装并配置。使用简单的文本生成和自然语言处理任务。利用任务链和工具扩展构建复杂的工作流。通过记忆管理上下文,创建更智能的应用。扩展多模态处理能力,集成图像和音频分析。将应用部署到云端,并通过 Azure Functions 提供智能服务。无论是构建简单的对话应用,还是创建多模态智能服务,都提供了强大的工具和灵活的扩展机制。希望这篇文章能帮助你更好地理解并运用这个框架,构建出更加智能和高效的应用。

net core ,前端 ,python 全栈开发 2806

车窗标定工作流程

标定简单来说就是修改防夹参数来适配对应的车型,所有的防夹的参数在vers_userdef.h文件中定义。#标定内容。

qq_21274991的博客 4272

第二章 SQL命令参考-PREPARE

PREPARE Prepare astatement for execution. 概要 PREPARE name [(datatype [,...])] AS statement 描述 PREPARE创建一个准备好的语句,可能带有未绑定的参数。准备语句是可用于优化性能的服务器端对象。随后可以使用对其参数的绑定来执行准备好的语句。 Greenplum数据库可能会选择对同一准备语句的不同执

kygoal的博客 614

open-mmlab / mmpose安装、使用教程

mmpose安装、使用教程mmpose安装教程1. 安装mmcv-full2. 安装MMPose2. 安装mmdet使用教程1. 预测图片2. 预测视频 mmpose mmpose是商汤旗下有又一款好用的工具箱,主要是针对姿态识别任务开发的,包括人体姿态识别和动物姿态识别。里面继承很多现成的网络可以供大家使用,并且提供了训练好的权重。用户可以更具自己的需求训练自己的数据,或者直接应用他们的结果,反正就是很全面啦!!!! github连接:https://github.com/open-mmlab/mmpos

CharmsLUO的博客 1万+

sql prepare语句 PHP,Mysql必读MySQL prepare语句的SQL语法

作者:VEPHP 时间 2017-09-28《Mysql必读MySQL prepare语句的SQL语法》要点:本文介绍了Mysql必读MySQL prepare语句的SQL语法,希望对您有用。如果有疑问,可以联系我们。MySQL prepare语法:PREPARE statement_name FROM preparable_SQL_statement; /*定义*/EXECUTE state...

weixin_34618526的博客 712

可信数据空间:可信空间、区域功能节点、业务功能节点、连接器的关联关系

可信数据空间通过分层架构实现安全数据共享:可信空间作为顶层制定全局规则;区域功能节点协调辖区内功能节点协作;功能节点提供具体数据服务;连接器作为唯一通信通道确保安全交互。系统采用"规则自上而下约束,数据自下而上流动"机制,通过分层治理和标准化连接,在保证数据主权的同时实现跨域协作,具有策略分级执行、去中心化治理等特性,支持灵活扩展业务场景。

友莘居士的博客 1688

某智能物流无人值守系统 ExportReport SQL注入漏洞复现

某智能物流无人值守系统 ExportReport存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例如,管理员后台密码、站点的用户个人信息)之外,甚至在高权限的情况可向服务器中写入木马,进一步获取服务器系统权限。

0xSec 819

prepraredStatement.setString(index,value)

prepraredStatement.setString(index,value) index:sql语句中第几个问号? ,(1,2,3,…) value:String /* * 总:使用setString方法会所形成的sql语句会在你的变量上加上单引号,字段名是变量要使用拼接,变量也可以使用拼接,拼接yyds * 使用prep.toString()方法能够看到形成的sql语句 * * contains(String name,String value) * name=email,v

weixin_43845386的博客 645

树根互联Java开发面试题及参考答案

说一下 Java 集合类。 Java 集合类是用于存储和操作一组对象的容器。它提供了多种数据结构,方便程序员对数据进行高效的管理和处理。 Java 集合框架主要包括两大接口:Collection 和 Map。 Collection 接口是一组对象的集合,它有三个主要的子接口:List、Set 和 Queue。 List 接口代表有序的集合,可以包含重复的元素。例如 ArrayList,它是基于数组实现的动态数组。它的优点是随机访问效率高,通过索引访问元素的时间复杂度为 O (1)。当

大模型大数据攻城狮的专栏 856

Statement和PreparedStatemet的区别以及SQL注入

主要介绍Statement和PrepardStatement的区别 1.编码简单 简单介绍一下如何简单化编码 st: String sql="insert into student (stuno,stuname)values('"+id+"','"+name+"'); st.executeUpdate(sql);   pst: String sql="insert into st...

java_xiaoWhite的博客 549

恒玄BES调试笔记-BES2500如何OTA升级ANC和通透参数

前期量产软件anc参数主要是通过anc工具写入flash中,或者anc total gain通过美格信设备校准写入,对于量产后如果想要更新anc参数,如通透模式参数,则无法更新。 这个时候需要通过OTA升级软件,把相关anc参数内置到软件中,从flash中读取total gain。 1、更新强弱降噪和通透参数,由于涉及到个人参数就不列出来了,主要是改动以下相关参数。 extern struct_anc_cfg * anc_coef_list_50p7k[ANC_COEF_...

leezs的博客 2225

交通仿真软件:SUMO_(13).Python脚本与TraCI接口

通过TraCI接口,用户可以实现与SUMO仿真器的实时交互,获取和控制交通数据。本文档详细介绍了如何使用Python脚本与TraCI接口进行交互,包括基本的设置、数据获取和控制方法。此外,还展示了几个高级应用示例,如交通流优化、多代理系统、车辆路径规划和车辆行为模拟。这些示例可以帮助用户更好地理解如何利用TraCI接口进行复杂的交通仿真和分析。希望这些内容对您有所帮助,如果您有任何问题或需要进一步的帮助,请参考SUMO的官方文档或社区支持。

kkchenjj的博客 1004

Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入?

http://www.cnblogs.com/RunForLove/p/4564224.html SQL注入攻防入门详解 转载于:https://www.cnblogs.com/xtdxs/p/6666010.html

weixin_34268310的博客 272

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

PreparedStatement与Statement对比、 SQL 注入漏洞原理及实例分析

测试代码import java.sql.*; import org.junit.Test; /** * PreparedStatement与Statement对比、 PreparedStatement防止sql语句的注入原理与分析 * * @author baozq * * 2018年3月14日 */ public class SelectInject { //模拟用...

bzqgo的博客 421

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Mybatis(一)

1.什么是Mybatis? 自我总结: Mybatis是Apache的一个开源框架,一开始是ibatis,之后迁移到了Google code上并改名为Mybatis。之后转移到了GitHub。 Mybatis是一个可持久层框架,将Java代码与SQL语句分离,让代码结构更分明,更容易维护。 Mybatis是通过xml和注解的方式进行将(statement、prepraredstatemen...

weixin_30244889的博客 74

IEM模型,地表粗糙度模拟

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

JDBC 笔记(2)

JDBC第二天 上午: 一.PreparedStatement(从Statement继承而来) 同构SQL:SQL语句基本一样,只是具体参数值不同. 异构SQL:SQL语句完全不一样. Statement不足: 1.效率比较低; 2.对字段类型的支持比较差; 3.语法含义不清晰.(结构不清楚) 由于编译时不需要参数,PreparedStatement 可以使用"?"来替代

奔跑吧--小犀牛 400

prepareStatement和Statement的区别

PreparedStatement、Statement

男儿当自强 1270

PostgreSQL PREPARE语句与JDBC中PreparedStatement语句关系

1. PostgreSQL(PG) PREPARE 语句 qingping=&gt; \h prepare Command: PREPARE Description: prepare a statement for execution Syntax: PREPARE name [ ( data_type [, ...] ) ] AS statement qingping=&gt; pre...

zhu4674548的专栏 3240

数据访问层和SQLWrapper库(sql包装器) 转载

转载 http://www.codeproject.com/cs/database/SqlWrapper.asp源代码本地下载:  使用SQLWrapper库,你可以写非常少的代码来创建你的数据访问类. 简介你曾经在你的项目中创建数据访问层吗?你很可能创建了一个类或者一些类,他们包含几个方法,调用了存储过程或者执行一个SQL语句.如果数据库包含很多表,这是个很烦人的工作过程.最糟糕的是,这...

D语言 D Language 积学致远 325

java.sql.preparedstatement的应用

jdbc(java database connectivity,java数据库连接)的api中的主要的四个类之一的java.sql.statement要求开发者付出大量的时间和精力。在使用statement获取jdbc访问时所具有的一个共通的问题是输入适当格式的日期和时间戳:2002-02-05 20:56 或者 02/05/02 8:56 pm。 通过使用java.sql.pre

gyf4817的专栏 1639
上一篇: 一个机械工程师也谈谈对数据和领域建模的理解
下一篇: 利用ThreadLocal完美解决JDBC动态拼接SQL的多条件查询
Drinkjava2
博客等级 码龄11年 9粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值