小编Cla*_*key的帖子

选择具有预期数量的唯一值和插入的HashSet的初始容量

好的,这是我的情况:

我有一个状态数组,可能包含重复项.为了摆脱重复,我可以将它们全部添加到Set中.

但是,当我创建Set时,它需要定义初始容量和负载因子,但它们应该设置为什么?

从谷歌搜索,我想出了:

String[] allStates = getAllStates();
Set<String> uniqueStates = new HashSet<String>(allStates.length, 0.75);
Run Code Online (Sandbox Code Playgroud)

这个问题是allStates可以包含1到5000个状态.因此,Set的容量将超过5000,但最多只能容纳50个.

因此,设置Set的最大大小可以设置为最大状态数,负载因子为1.

我想我的问题确实是:

  • 当您不知道Set中有多少项时,您应该将初始容量设置为什么?
  • 当它可以包含的最多是50时,它真正重要的是什么?
  • 我应该担心吗?

java set

16
推荐指数
2
解决办法
1万
查看次数

SQL最佳实践:count(1)或count(*)

可能重复:
计数(*)与计数(1)

我记得有传闻说:

当count(1)执行时,永远不要使用count(*)

最近我把这个建议传递给了另一位开发人员,并且被要求证明这是真的.当我得到建议时,我的论点就是我被告知的情况:数据库只返回第一列,然后计算.反驳的是,数据库不会评估括号中的任何内容.

从小桌子上的一些(不科学的)测试来看,似乎没有区别.我目前无权访问任何大型表格进行试验.

当我使用Sybase时,我得到了这个建议,表有数亿行.我现在正在使用Oracle并且数据少得多.

所以我想总结一下,我的两个问题是:

  1. 哪个更快,计数(1)还是计数(*)?
  2. 不同的数据库供应商会有所不同吗?

sql

15
推荐指数
2
解决办法
1万
查看次数

Oracle:在存储过程中使用数据库链接:表或视图不存在

我目前有一个问题,我不能在存储过程中引用链接数据库中的表.我收到错误消息:

ORA-00942:表或视图不存在

以下是我在主机(运行oracle 10g)上设置数据库链接到远程数据库(运行oracle 11g)的步骤.这些步骤是准确的,但有些名称已被更改,但它们保持一致.

  1. 更新tnsnames.ora,添加一个新条目:

    REMOTE_DB =
        (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)
                       (HOST = 10.10.10.10)
                       (QUEUESIZE = 20)
                       (PORT = 1521)
            )
            (CONNECT_DATA =
                       (SERVICE_NAME = remote_service)
            )
        )
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建数据库链接,作为稍后将创建和执行存储过程的用户:

    create database link remote_link
    connect to "remote_user"
    identified by "remote_pass"
    using 'REMOTE_DB';
    
    Run Code Online (Sandbox Code Playgroud)
  3. 通过选择证明数据库链接正在工作:

    select id from remote_table@remote_link;
    
    id
    --------------------------------------------------------------------------------
    8ac6eb9b-fcc1-4574-8604-c9fd4412b917
    c9e7ee51-2314-4002-a684-7817b181267b
    cc395a81-56dd-4d68-9bba-fa926dad4fc7
    d6b450e0-3f36-411a-ba14-2acc18b9c008
    
    Run Code Online (Sandbox Code Playgroud)
  4. 创建依赖于工作数据库链接的存储过程:

    create or replace
    PROCEDURE test_remote_db_link
    AS
    v_id varchar(50);
    BEGIN   
        select id into v_id from remote_table@remote_link where id = 'c9e7ee51-2314-4002-a684-7817b181267b';
        dbms_output.put_line('v_id : ' || …
    Run Code Online (Sandbox Code Playgroud)

sql database oracle stored-procedures dblink

11
推荐指数
1
解决办法
4万
查看次数

未将字段声明为final时的Checkstyle错误

我有以下用java编写的自定义异常:

import java.util.List;

public class PolicyException extends RuntimeException {

    private static final long serialVersionUID = -1760901980049241500L;
    private PolicyErrorCode code;
    private List<String> variables;

    public PolicyException(final PolicyErrorCode code, final List<String> variables) {
        this.code = code;
        this.variables = variables;
    }

    public PolicyErrorCode getCode() {
        return code;
    }

    public void setCode(final PolicyErrorCode code) {
        this.code = code;
    }

    public List<String> getVariables() {
        return variables;
    }

    public void setVariables(final List<String> variables) {
        this.variables = variables;
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下checkstyle错误:

字段'code'必须声明为final.

字段'变量'必须声明为final.

我相信抛出的checkstyle错误是FinalLocalVariableCheck.根据api:

确保永远不会更改其值的局部变量必须声明为final.

但是,显然有涉及变量的getter和setter,所以它们不能被声明为final. …

java error-handling checkstyle

7
推荐指数
1
解决办法
3338
查看次数

SQL Group By 根据用户定义函数的输出

在 Oracle 中,是否可以根据用户定义函数的输出对数据进行分组?当我尝试这样做时,我遇到了错误,下面的示例最好地说明了这一点:

我正在尝试询问类似于下面的表结构的结果:

id   | data
1000 | {abc=123, def=234, ghi=111, jkl=456, mno=567, pqr=678, stu=789, vwx=890, yza=901}
1000 | {abc=123, def=234, ghi=222, jkl=456, mno=567, pqr=678, stu=789, vwx=890, yza=901}
1000 | {abc=123, def=434, ghi=333, jkl=456, mno=567, pqr=678, stu=789, vwx=890, yza=901}
1000 | {abc=123, def=434, ghi=444, jkl=456, mno=567, pqr=678, stu=789, vwx=890, yza=901}
1000 | {abc=123, def=634, ghi=555, jkl=456, mno=567, pqr=678, stu=789, vwx=890, yza=901}
1000 | {abc=923, def=634, ghi=666, jkl=456, mno=567, pqr=678, stu=789, vwx=890, yza=901}
1000 | {abc=923, def=434, ghi=777, jkl=456, mno=567, …
Run Code Online (Sandbox Code Playgroud)

sql oracle group-by function user-defined-functions

4
推荐指数
1
解决办法
7475
查看次数

REST Assured:如何使用JSON中的嵌套属性查找元素并验证其他属性

我保证经验有限.我们有很多测试,我通常可以在google中找到示例,或者google失败,但是当我尝试在匿名数组中的元素的嵌套属性上匹配时,我被困住了,并且向上和向下验证属性(cousins?) .

示例JSON:

[  
   {  
      "id":1,
      "type":{  
         "typeId":3,
         "name":"LPM"
      },
      "status":{  
         "id":1,
         "price":1.20,
         "source":172,
         "valid":0
      }
   },
   {  
      "id":2,
      "type":{  
         "typeId":2,
         "name":"ST"
      },
      "status":{  
         "id":10,
         "price":1.20,
         "source":172,
         "valid":0
      }
   }
]
Run Code Online (Sandbox Code Playgroud)

我使用的是放心了,我想找到有列表中的元素type.name等于LPM,然后再验证status.price,status.source以及status.id只有元素.

当我最初开始验证响应时,只有一个项目可以在数组中,所以我使用:

response.then()
        .assertThat()
        .body("size", greaterThan(0))
        .body("[0].type.name", equalToIgnoringCase("LPM"))
        .body("[0].status.id", equalTo(statusId))
        .body("[0].status.source", equalTo(sourceId))
        .body("[0].status.price", equalTo(price));
Run Code Online (Sandbox Code Playgroud)

但是,这不再有效,因为数组中可能有多个元素,并且无法保证顺序.

我修改了我的身体检查:

response.then()
        .assertThat()
        .body("size", greaterThan(0))
        .body("type.name", hasItem("LPM"))
        .body("status.id", hasItem(statusId))
        .body("status.source", hasItem(sourceId))
        .body("status.price", hasItem(price));
Run Code Online (Sandbox Code Playgroud)

这是足以让测试通过,但这种引入的风险status.id,status.source以及status.price与元素type.nameLPM可能是不正确的,但因为他们对与元素相匹配,这将不会被检测到type.nameST.

所以,我希望能够找到具有LPM,因为它的元素type.name …

java hamcrest rest-assured spring-boot mockmvc

2
推荐指数
1
解决办法
5721
查看次数