`
drinkjava2
  • 浏览: 41780 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

发现一种超简单的将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中。
分享到:
评论

相关推荐

    sql下三种批量插入数据的方法

    第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的表值参数方法,表值参数是 SQL Server...

    SQL Server将一列的多行内容拼接成一行的实现方法

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...

    查看LINQ生成SQL语句的几种方法

    以下将详细介绍几种查看LINQ生成SQL语句的方法。 1. **Debug.WriteLine()** 在使用LINQ查询时,可以利用`Debug.WriteLine()`方法将生成的SQL语句打印到控制台。例如: ```csharp var query = (from customer in ...

    C#防SQL注入代码的三种方法

    对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全... C#防SQL注入方法一  在Web.config文件中

    一种二阶SQL注入攻击防御方法.pdf

    一种二阶SQL注入攻击防御方法 SQL 注入攻击已经成为 Web 应用程序最大的安全威胁。二阶 SQL 注入危害性大,注入点隐秘性高,注入过程复杂,不易检测。为防御二阶 SQL 注入,提出了一种基于代理服务器的防御方法。...

    一种基于大语言模型的SQL注入攻击检测方法.pdf

    "一种基于大语言模型的SQL注入攻击检测方法" 在网络安全领域中,SQL注入攻击是一种常见的网络攻击手段,对网络空间安全造成了严重威胁。传统的SQL注入攻击检测方法主要有基于规则和基于机器学习两种,但是这些方法...

    超好用的SQL2008R2绿色版

    总结来说,"超好用的SQL2008R2绿色版"是一个面向小规模应用和测试环境的SQL Server 2008 R2精简版,它提供了一种简便的使用方式,便于快速部署和使用,但不适用于商业生产环境。用户在使用时需要注意其功能限制,并...

    mysql转化成sql server sql转化成mysql工具

    标题提到的“mysql转化成sql server”和“sql转化成mysql工具”就是解决这个问题的关键。 首先,我们来讨论MySQL到SQL Server的转换。MySQL是一种开源、轻量级的DBMS,适合小型到大型的应用场景。而SQL Server则...

    一种SQL注入漏洞定位检测方法.pdf

    根据提供的文件内容,本文将介绍与“一种SQL注入漏洞定位检测方法”相关的核心知识点。 首先,SQL注入是攻击者通过在Web应用程序的数据库查询中插入恶意的SQL代码片段,从而操纵数据库的行为。这些恶意的SQL语句...

    快速清除SQLServer日志的两种方法

    本文将详细介绍快速清除SQLServer日志的两种方法,包括清空日志和删除LOG文件,并且对每种方法进行了详细的解释和操作步骤。 清空日志 清空日志是快速清除SQLServer日志的第一种方法。这种方法可以通过使用DUMP ...

    C#将Lambda表达式转成Sql语句

    在.NET框架中,C#是一种强大的编程语言,它支持Lambda表达式,这使得代码更加简洁、易读。Lambda表达式通常用于LINQ(Language Integrated Query)查询,它允许程序员使用类似SQL的语法在内存中的数据集上进行操作。...

    PB125连接SQL数据库两种方法

    本文将详细介绍PB12.5中连接SQL Server数据库的两种常见方法。 #### 二、方法一:使用SNCSQLNativeClient(OLEDB)连接方式 这种方法主要利用了SNCSQLNativeClient(OLEDB)驱动程序来实现PB与SQL Server数据库之间的...

    Oracle Sql语句转换成Mysql Sql语句

    在数据库管理领域,Oracle SQL和MySQL SQL是两种广泛使用的SQL方言,它们在语法和功能上存在一定的差异。当需要将一个基于Oracle SQL的应用程序迁移到MySQL环境时,就需要进行SQL语句的转换工作。本项目提供了一个...

    SQL SERVER连接oracle数据库几种方法

    SQL SERVER 连接 Oracle 数据库几种方法 在实际开发中,我们经常需要在 SQL Server 中连接 Oracle 数据库,以便实现数据交换和集成。那么,如何在 SQL Server 中连接 Oracle 数据库呢?下面我们将介绍几种常见的...

    sqlserver排名次若干种方法

    本文将详细探讨几种实现这一功能的方法,并针对不同的业务场景提供解决方案。 #### 场景概述 假设我们有一张表,其中包含一个字段`a`,该字段存储从0到100的整数。现在需要根据`a`的值进行排名,并考虑以下三种...

    一种新的SQL注入防护方法的研究与实现.pdf

    Web应用安全是信息安全领域的一个重要问题,而SQL注入攻击是其中一种最常见的攻击手段。这类攻击的危害在于,攻击者通过向Web应用输入恶意构造的数据,使得这些数据在服务器执行时,包含的恶意代码能够被执行,造成...

    超好用的sql格式化工具

    超好用的sql格式化工具,支持单个sql格式/sql文件批量格式/监控剪切板并自动将sql复制的sql语句格式化工具, 支持mssql/oracle/mysql/msaccess/generic... 一句话,不好用回帖骂我吧

    SQL Server上的一个奇怪的Deadlock及其分析方法

    本文将详细介绍SQL Server上的一个奇怪的Deadlock及其分析方法。 Deadlock的产生原因 在本文中,我们遇到了一个奇怪的Deadlock问题,它的产生原因与索引和锁机制有关。在SQL Server中,索引可以提高查询性能,但...

    SQLServer中如何将一个字段的多个记录值合在一行显示

    在本文中,我们将介绍如何在 SQL Server 中将一个字段的多个记录值合并到一行显示,并提供相关的示例代码和实现方法。 知识点 1:使用 User-Defined Function(UDF)实现字段值合并 在 SQL Server 中,我们可以...

    XML查询语句转换成SQL语句的实现.pdf

    将 XPath、XQuery 语句转换成 SQL 语句的算法实现示例程序清单显示了把一条 XPath 句翻译成 SQL 的算法。其中 Edge 表是将 XML 文档编码存入关系数据库后产生的表。算法首先产生 SQL 语句段来选择被存储的文档的根...

Global site tag (gtag.js) - Google Analytics