好的,这是我的情况:
我有一个状态数组,可能包含重复项.为了摆脱重复,我可以将它们全部添加到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.
我想我的问题确实是:
可能重复:
计数(*)与计数(1)
我记得有传闻说:
当count(1)执行时,永远不要使用count(*)
最近我把这个建议传递给了另一位开发人员,并且被要求证明这是真的.当我得到建议时,我的论点就是我被告知的情况:数据库只返回第一列,然后计算.反驳的是,数据库不会评估括号中的任何内容.
从小桌子上的一些(不科学的)测试来看,似乎没有区别.我目前无权访问任何大型表格进行试验.
当我使用Sybase时,我得到了这个建议,表有数亿行.我现在正在使用Oracle并且数据少得多.
所以我想总结一下,我的两个问题是:
我目前有一个问题,我不能在存储过程中引用链接数据库中的表.我收到错误消息:
ORA-00942:表或视图不存在
以下是我在主机(运行oracle 10g)上设置数据库链接到远程数据库(运行oracle 11g)的步骤.这些步骤是准确的,但有些名称已被更改,但它们保持一致.
更新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)创建数据库链接,作为稍后将创建和执行存储过程的用户:
create database link remote_link
connect to "remote_user"
identified by "remote_pass"
using 'REMOTE_DB';
Run Code Online (Sandbox Code Playgroud)通过选择证明数据库链接正在工作:
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)创建依赖于工作数据库链接的存储过程:
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)我有以下用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. …
在 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) 我保证经验有限.我们有很多测试,我通常可以在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 ×3
sql ×3
oracle ×2
checkstyle ×1
database ×1
dblink ×1
function ×1
group-by ×1
hamcrest ×1
mockmvc ×1
rest-assured ×1
set ×1
spring-boot ×1