用StringBuffer写数据查重代码
来源:互联网 发布:知乎 平面设计提高 编辑:程序博客网 时间:2024/05/20 14:43
在做项目期间,需要在Java后台代码中写一个当添加新数据时与数据库已存在数据进行查重的语句,特此记录。
// 进行-物料编码(产品编码)的查重 StringBuffer hql = new StringBuffer();hql.append("select a from Material as a where a.number = '"+ userForm.getNumber()+"'");List mtlLt = publicService.executeObjectSql(hql.toString());if(mtlLt.size()==0){ // 当数据不存在时需要执行的语句}
补充:String与StringBuffer进行字符拼接的不同
String类用来表示那些创建后就不会再改变的字符串,它是immutable的。
StringBuffer类用来表示内容可变的字符串,并提供了修改底层字符串的方法。
当我们进行字符拼接时,应使用StringBuffer类而非String类,因为前者将比后者快上百倍。的确,在程序的太多场合我们都会进行字符串拼接工作,简单的代码示例如下:
String hql="select a from Material as a "; hql+=" where a.number = '"+ userForm.getNumber()+"'";
如果用StringBuffer类的话,代码如下:
StringBuffer hql= new StringBuffer(" ");hql.append(" select a from Material as a where a.number = '"+ userForm.getNumber()+"' ");
从表面看来String类只用一个加号(+)便完成了字符串的拼接,而StringBuffer类却要调用一个append()方法,是否实现起来更简洁呢?其实不然,让我们了解一下程序运行内部发生了哪些事情:
经编译后程序的bytecode(字节码)展示出了实质: 在用String类对象直接拼接时,JVM会创建一个临时的StringBuffer类对象,并调用其append()方法完成字符串的拼接,这是因为 String类是不可变的,拼接操作不得不使用StringBuffer类(并且--JVM会将”select a from Material as a”和” where a.number = ‘”+ userForm.getNumber()+”’”创建为两个新的String对象)。之后,再将这个临时StringBuffer对象转型为一个String,代价不菲!可见,在这一个简单的一次拼接过程中,让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String它当然不是最初的hql了,这个引用的名称没变,但它指向了新的String对象。
而如果直接使用StringBuffer类,程序将只产生两个对象:最初的StringBuffer和拼接时的String(”where a.number = ‘”+ userForm.getNumber()+”’”),也不再需要创建临时的StringBuffer类对象而后还得将其转换回String对象。
可以想象,当我们的字符串要被循环拼接若干段时,用String类直接操作会带来多少额外的系统开销,生成多少无用的临时StringBuffer对象,并处理多少次无谓的强制类型转换。
- 用StringBuffer写数据查重代码
- 用python写一段查天气的代码
- 用scala来写mapreduce做数据去重
- 线性表-数据查重算法
- 九、excel导入数据查重问题
- MySql数据库:数据查重、去重的实现
- ORACLE中数据查重及重复数据删除
- 查重
- 查重
- ssh框架中ajax对用户名查重的代码
- SqlBulkCopy快速插入大量数据,缺点就是不能查重
- java导入Excel中数据查重的方法
- 代码优化从数据库里查数据
- 爬取天眼查数据 附代码
- 都说Djnago框架重,那就让哥用15行代码写个django web程序!
- 代码重构(三):数据重构规则
- 代码重构(三):数据重构规则
- 写StringBuffer到文件
- 657. Judge Route Circle
- 电路实验
- 解读Oracle12.2体系架构:Filesystem与Multitenant
- 考研经验贴——看了都上了
- 在CentOS环境下mysql如何远程连接
- 用StringBuffer写数据查重代码
- matplotlib.pyplot中文标题乱码
- Qt中QLabel显示动态图的平滑缩放
- UVa 11690
- 程序员怎么升职加薪?十年技术高管的过来人经验!
- js中的函数一
- 如何成为一名成功的程序员
- 身为程序员的你是不是经常说这几句话呢?
- Android中View的绘制流程