`
chenyinle
  • 浏览: 10862 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

一个sql拼接的问题

 
阅读更多

首先,这只是一个很小很小的细节问题,但我们可以于细微处见精神,发散一下,如...

 

是这样的,今天处理一个数据接口的报错的bug,找啊找,终于找到了,原来是sql的字符串拼接错误

 

错误来源是拼的sql的in条件格式出错,具体表现为例如:select * from table where in(111,234,),所以导致sql执行错误了

 

原代码如下: 


其实,一咋眼,感觉没问题,but,实际上套红的201行的判断逻辑是不严谨的

 

这个方法涉及到四点问题,一个效率低的问题,和三个不严谨的地方

 

1、一个性能的问题。201行,仅仅是为了判断是否为list里面最后一个遍历的元素,其实不用indexOf(indexOf是需要遍历list的),这里的时间复杂度是O(n*n). so,从性能上来说,这里可以改成for(;;)这种遍历方式,直接判断下标是否是最后一个元素就行了,这样时间复杂度是O(n).

 

2、严谨性的问题。由于for循环里面199行还有一个判断(news.getUser.getCompany!=null,应该算是有效元素的一个判断吧),这样的话,遍历的时候执行到201行怎样也无法保证是否遍历到最后一个元素的(因为外面还有一层判断,也许会提前结束遍历)。

 

3、第二个严谨性的问题。list.indexOf其实是不能保证当前遍历的元素和indexOf的返回下标一致,因为indexOf默认情况下只会比较对象引用是否相等,假如list里面包含两个一样的元素(同一个对象),这样会导致代码判断逻辑出错。

 

4、第三个严谨性的问题。当有一种极端的情况,list传进来为null,或每一次news.getUser.getCompany!=null判断的时候,都返回false,那么方法返回值就是'()'了,格式不正确,应该返回'(11,22,33)'格式。

 

事实上,这次的出错的正是第三点的不严谨导致的,因为一些原因,方法里面传入的list的元素真的有重复了,导致indexOf的时候返回的下表不准了,就判断错误,导致方法返回了'(1,2,)'这种格式了。

 

so,就这个方法而言,做了如下改进:


 

 

改进了之后,

1、保证了效率问题,时间复杂度是O(n),且只管遍历就得了,不用每次都判断是否为最后一个元素

 

2、由于in里面是ID参数,so,假如in括号的参数为空时,返回了'(0)',满足了格式要求,且不会导致数据不一致(这里只是一种方式,不是说这样做就很好很官方)

 

3、保证了返回的字符串逻辑严谨性

 

不管如何,这样bug也修复了,代码也严谨了...

  • 大小: 42.9 KB
  • 大小: 36.4 KB
分享到:
评论

相关推荐

    SQL拼接工具包API 支持Oracle/PostgreSQL/MySql

    简化sql拼接过程,提升开发效率,减少拼接错误。 可以拼接select、update、delete语句以及where条件语句。 拼接where条件可自动组织参数并返回。 支持andEq(), andGt(), andGe(),andLt(), andLe(), andEqDate(), ...

    sql拼接:不要拼接Sql,而要使用参数的好处

    ### SQL拼接与参数化查询的重要性 在软件开发过程中,特别是涉及到数据库操作的应用程序中,SQL语句的构造和执行是非常关键的一步。传统的做法往往采用字符串拼接的方式来构建SQL语句,例如: ```csharp string ...

    SQL语句拼接

    添加了一条基础的SQL语句,其中`Tuser`是数据库中的表名,`t`是别名,`where 1=1`是一个常用的技巧,可以确保后面的条件能够正常拼接到SQL语句中。 4. **根据条件添加额外的SQL子句**: ```java if (name != ...

    SQL查询结果进行拼接

    SQL查询结果拼接

    sql server拼接字符串和拼接一列的值

    sql server拼接字符串查询语句。 普通拼接字符串和拼接某一列的所有值。

    开发sql语句拼接自动格式化工具

    总的来说,"开发SQL语句拼接自动格式化工具"是一个能够提升SQL编程体验的高效工具,它简化了SQL的格式化和拼接过程,增强了代码的可读性,提高了开发效率,并且具备良好的用户体验。对于从事数据库开发和管理工作的...

    MyBatis动态拼接SQL

    这是动态SQL中非常常用的一个标签。 ```xml DELETE FROM table WHERE id IN (" separator="," close=")"> #{item} ``` 在实际开发中,我们可以结合这些标签灵活组合,实现各种复杂的动态SQL。MyBatis动态...

    动态拼接sql语句工具类,拼接where后面语句

    动态拼接sql语句工具类,拼接where后面语句 配合原生jdbc仿动态sql注入 if (ObjectUtil.isNotEmpty(maxLat)&&ObjectUtil.isNotEmpty(minLat)){ sqlParamList.add(new SqlParam("lat",minLat, SqlOpEnum.GE)); ...

    SQL语句拼接工具,简化SQL语句拼写代码

    为了解决这个问题,出现了SQL语句拼接工具,如描述中提到的,它能帮助简化SQL语句的拼写代码,提高开发效率。 标题中的“SQL语句拼接工具”是指一种软件开发辅助工具,它的主要功能是自动化生成SQL语句,特别是在...

    易语言动态拼接sql语句

    以下是一个简单的易语言动态拼接SQL查询的示例: ```易语言 .数据库连接 = 创建数据库连接("SQLite", "database.db") .动态SQL = "SELECT * FROM 表名 WHERE 条件字段 = '%s'" .条件值 = 输入框("请输入条件值:") ....

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

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

    Java 使用注解拼接SQL语句

    "Java使用注解拼接SQL语句"是一个常见的实践,它使得动态构建SQL查询变得更为简洁和可维护。这种技术通常与ORM(对象关系映射)框架如MyBatis或Hibernate结合使用,但也可以通过自定义处理逻辑实现。 1. **自定义...

    前台拼接SQL语句

    4. 使用ORM(对象关系映射)框架,如Hibernate或Entity Framework,它们会自动处理SQL拼接和安全问题。 5. 避免在前端暴露敏感信息,如数据库结构、表名或字段名。 综上所述,"前台拼接SQL语句"是一个重要的安全...

    SQL2JAVA-java字段串代码拼接小工具

    标题中的“SQL2JAVA-java字段串代码拼接小工具”是指一个辅助开发的软件,它主要功能是帮助程序员便捷地在Java代码和SQL语句之间进行转换,特别是处理字符串拼接的问题。在软件开发过程中,尤其是在数据库交互时,...

    sql语句拼接+游标技术

    sql语句拼接+游标技术sql语句拼接+游标技术sql语句拼接+游标技术sql语句拼接+游标技术sql语句拼接+游标技术sql语句拼接+游标技术sql语句拼接+游标技术sql语句拼接+游标技术

    JDBC中动态拼接SQL的工具类

    JDBC中动态拼接SQL的工具类。 对于使用纯SQL访问数据库的同学会有些帮助。 并具有一定的扩展性。

    SQL拼接替换程序

    程序可以替换Java开发中SQL语句中参数的替换拼接,便于在数据库中执行Java开发中SQL语句。直接将参数替换SQL中的问号。将Java中写好的SQL拿出来,直接将参数逗号隔开依次写入,直接可替换生成可执行SQL语句。

    sql 多行合并某一列字符串拼接的示例

    本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的技术,并通过一个具体的示例来展示这一过程。 ### SQL字符串拼接的原理 在SQL中,字符串拼接是指将多个字符串值连接成一个单一的字符串。不同...

    自动拼接sql

    它允许用户将多个参数合并成一个完整的SQL字符串,以便在执行时通过`EXEC`函数使用。 在SQL中,`EXEC`命令常用来动态执行存储过程或T-SQL语句。这是因为某些操作可能需要根据条件或用户输入来动态构造SQL语句,而...

Global site tag (gtag.js) - Google Analytics