冒个泡,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 Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...
sql优化的几种方法sql优化的几种方法sql优化的几种方法sql优化的几种方法sql优化的几种方法
一种基于SQL的数据库初始化通用方法.pdf
SQL2000各种查询方法!
对于网站的安全性,是每个网站开发者和运营者最关心的问题。网站一旦出现漏洞,那势必将造成很大的损失。为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全... C#防SQL注入方法一 在Web.config文件中
第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的表值参数方法,表值参数是 SQL Server...
一种利用VB将SQL Sever数据库数据生成excel报表的方法.pdf
一种利用PHP防御SQL注入攻击的方法.pdf
一种Android系统访问SQL Server数据库的方法.pdf
优化SQLServer数据库的50种方法
超经典SQL语句全集,超经典SQL语句全集
一种粗糙查询的SQL实现新方法.pdf
下面通过两个方面给大家介绍js代码防止sql注入的方法,非常简单实用,感兴趣的朋友参考下吧
一种转换SQL Server数据库的方法.pdf
一种二阶SQL注入攻击防御方法.pdf
设计高效SQL: 一种视觉的方法 人们提到SQL时总是说,既然它是一种声明性语言,你不必告诉它如何获得你要的数据; 你只需描述你要找的数据。确实如此:描述你的需求,你就会得到你想要的,但没人能保证能够以你预期的...
数据库数据之间的转化,软件方便快捷 sql转化成mysql工具 mysql转化成sql server
SQLServer2005使用方法
一种将SQL数据库远程备份与恢复的方法.pdf
一种基于SQL的灵活报表系统设计方法.pdf