`
drinkjava2
  • 浏览: 41751 次
  • 性别: 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 ...

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

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

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

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

    超好用的SQL2008R2绿色版

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

    基于SQL语法树的SQL注入过滤方法研究.pdf

    本文提出的【基于SQL语法树的SQL注入过滤方法】引入了一种新的安全策略。这种方法首先将用户输入转化为SQL语法树结构,然后通过比较这个结构与预期的、安全的SQL语句结构,判断用户输入是否包含恶意成分。这种方法的...

    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数据库之间的...

    一种可视化的SQL语言对比教学方法在VF教学中的应用.pdf

    为了帮助学生更好地理解和掌握SQL语言,一种可视化的SQL语言对比教学方法应运而生。该方法利用VF提供的可视化工具,如查询设计器等,来创建和修改应用系统中的数据库、数据表、查询等组件。查询设计器通过选项卡的...

    sql学习方法和技术

    SQL 是与 DBMS 进行通信的一种语言和工具,将 DBMS 的组件联系在一起。可以为用户提供强大的功能,使用户可以方便的进行数据库的管理、数据的操作。通过 SQL 命令,程序员或数据库管理员(DBA)可以完成许多功能。...

    sql2005备份的几种方法

    "sql备份方案1.rar"可能包含一个备份打包的解决方案,这通常涉及将多个备份文件合并成一个大文件,以便于存储和传输。打包可以减少存储空间需求,提高恢复效率。在SQL Server中,可以使用第三方工具或编写自定义...

    一种SQL负载裁剪新方法的研究.pdf

    SQL负载分析是数据库优化和性能调优的关键步骤之一,通过分析SQL负载可以发现频繁执行的语句、性能瓶颈等问题。 知识点二:负载裁剪技术 负载裁剪技术旨在减小SQL负载集合的规模,通过提取出具有代表性的子集来减小...

    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`的值进行排名,并考虑以下三种...

Global site tag (gtag.js) - Google Analytics