小编Luk*_*der的帖子

什么是ROWS UNBOUNDED PRECEDING用于Teradata?

我刚刚开始使用Teradata,我在Teradata遇到了一个名为"Rows unbounded preceding"的Ordered Analytical Function.我尝试了几个网站来了解这个功能,但是所有这些网站都使用了一个复杂的例子来解释它.能否请你给我一个天真的例子,以便我能清楚地了解基础知识.

sql teradata window-functions

33
推荐指数
2
解决办法
10万
查看次数

运营商中的Java

对于百万分之一的时间,我本来希望IN在Java中使用运算符,类似于INSQL中的运算符.它可以作为编译器语法糖实现.所以这

if (value in (a, b, c)) {
}
else if (value in (d, e)) {
}
Run Code Online (Sandbox Code Playgroud)

......真的很棒.事实上,上面的内容与这里相当冗长(并且不适用于原语)的构造相同:

if (Arrays.asList(a, b, c).contains(value)) {
}
else if (Arrays.asList(d, e).contains(value)) {
}
Run Code Online (Sandbox Code Playgroud)

或者这样的int,long和类似的形式:

switch (value) {
  case a:
  case b:
  case c:
    // ..
    break;

  case d:
  case e:
    // ..
    break;
 }
Run Code Online (Sandbox Code Playgroud)

或者可能有更高效的实现.

题:

这样的东西会成为Java 8的一部分吗?如果没有,我怎么能提出这样的建议呢?或者,我现在可以使用任何等效的构造吗?

java syntactic-sugar jls in-operator

32
推荐指数
4
解决办法
5722
查看次数

比较Querydsl,jOOQ,JEQUEL,activejdbc,iciql和其他查询DSL

有人能指出一些关于可用于Java的不同Query DSL库之间性能比较的资源,如:Querydsl,jOOQ,JEQUEL,activejdbc,iciql等等......

背景:我使用Spring JDBC模板,但仍然需要以纯字符串格式编写查询.虽然我在编写直接查询时没有问题,但我担心直接依赖于DB表名.我不想使用任何ORM框架,如Hibernate或JPA/EclipseLink.我需要尽可能高的原始性能(IMO,它们适用于更多以CRUD为中心的应用程序).我可以为这些DSL提供一些轻微的开销,只要它有点(我相信,它主要是StringBuilder/String连接!)

我考虑过在某些xml中使用外部化的命名查询.但只是试图评估不同的Query DSL库提供的价值.

编辑:更多关于我的要求: 我想知道使用他们的API方法构建中等复杂查询时这些之间的性能比较.我需要的是使用任何这些查询DSL库生成查询字符串并将其传递给Spring JDBC模板.所以,我想知道如果添加这个中间步骤会导致相当大的性能损失,我想使用命名查询或构建我自己的库,它只使用StingBuilder或类似的方法

用jOOQ,iciql,QueryDSL更新我的经验:

虽然我错过了在我的原帖中提到这一点,但我也热衷于易用性和我在实体类中需要的开销(如果需要任何额外的注释或实现).

jOOQ:

  • 需要将实体属性更改为特定于库的方式
  • 可以返回SQL查询字符串

Iciql:

  • 实体可以映射到没有或很少的变化(可以使用总共3种方式映射)
  • 但由此限制只选择查询(更新/删除/ ...再次要求实体更改)

QueryDSL:

  • 使用表绑定实体的多种方法(支持使用JPA注释的库特定方式除外).但我们至少需要修改实体
  • 没有简单/直接的方式来获取查询字符串

(所有观察对我都知之甚少;如果其中任何一个不正确,请更正)

综上所述,我坚持编写命名查询:(但由于Lukas Eder的答案似乎解释了我原来的帖子关注(表现),我接受了他的.

java performance spring-jdbc querydsl jooq

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

是否存在用于无符号数字类型包装器的Java库?

显然,Java本身不支持无符号数字类型,并且不会很快改变(从2002年开始的评论).但是,在使用MySQL等数据库时,它们可能会偶尔派上用场.有很多问题涉及如何模拟无符号数.例如:

所有这些肤浅描述它是如何做到.但是它有什么实际图书馆去所有的方式和实施适当的包装UByte,UShort,UInteger,ULong?优选地,那些包装器将延伸java.lang.Number并提供类似于其的算术API java.math.BigInteger.

本文档中可以看出,有很多需要考虑的问题,以及可能出错的问题(例如,如何按位移位,如何乘法等),所以我不想自己做.此外,我不想只使用下一个更高的类型(例如,Short而不是Byte等).我想的概念8-bit,16-bit,32-bit,64-bit号码保留,与数据库提供最好的交互,例如.

更新:

在你回答之前!考虑一下我知道所有的解决方法,但我真的很想拥有具有上述属性的4种类型.也许有人已经这样做了,所以这就是我问的原因.无需提醒我解决方法.

java unsigned numbers

31
推荐指数
2
解决办法
9414
查看次数

Maven中"提供"范围的"可选"依赖项

Maven有时候有点过头了......我创建了一个库,它对slf4j和log4j有可选的依赖.通过可选,我的意思是:

  • 我的库在编译时需要那些日志框架
  • 我的库在运行时不需要它们,但如果它"发现"它们,它将使用它们

目前,我已将该依赖标记为"可选"和"已提供":

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
    <type>jar</type>
    <scope>provided</scope>
    <optional>true</optional>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但是我的一些用户报告了问题,因为他们不需要log4/slf4j.我的依赖是否正确?不幸的是,我发现官方文档有点过于抽象,无法理解这个问题.

log4j dependency-management maven

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

Java JDBC Lazy-Loaded ResultSet

有没有办法获得从运行JDBC查询获得的ResultSet来延迟加载?我希望每行都按照我的要求加载,而不是事先加载.

java lazy-loading jdbc resultset

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

为什么我不能在Java中"静态导入"一个"equals"方法?

我喜欢在这里使用这个方法:

org.apache.commons.lang.ObjectUtils.equals(Object object1, Object object2)
Run Code Online (Sandbox Code Playgroud)

唯一的缺点(例如,与Google Guava相比),我无法静态导入该方法.即这没用:

import static org.apache.commons.lang.ObjectUtils.equals;
Run Code Online (Sandbox Code Playgroud)

...因为我的Eclipse编译器在编写时无法正确链接该方法

equals(obj1, obj2);
Run Code Online (Sandbox Code Playgroud)

错误是:

Object类型中的方法equals(Object)不适用于参数(...,...)

这是为什么?如果在任何超类型中存在具有相同名称(但不是相同的签名)的方法,我的静态导入方法是否不适用?这是在JLS中正式指定的吗?还是一些Eclipse编译问题?

UPDATE

这也不起作用:

import static org.apache.commons.lang.ObjectUtils.defaultIfNull;

public class Test {
  void test() {
    defaultIfNull(null, null);
    // ^^ compilation error here
  }

  void defaultIfNull() {
  }
}
Run Code Online (Sandbox Code Playgroud)

javac错误消息:

Test.java:5: defaultIfNull() in Test cannot be applied to (<nulltype>,<nulltype>)
defaultIfNull(null, null);
    ^
1 error
Run Code Online (Sandbox Code Playgroud)

java import static compiler-errors equals

29
推荐指数
5
解决办法
3859
查看次数

JLS的哪些部分证明能够抛出已检查的异常,就好像它们未经检查一样?

最近发现并写了一篇关于这样一个事实的博客:有可能通过javac编译器偷看一个已检查的异常,并将它扔到不能抛出它的地方.这在Java 6和7中编译并运行,抛出一个SQLExceptionwithout throwscatch子句:

public class Test {

    // No throws clause here
    public static void main(String[] args) {
        doThrow(new SQLException());
    }

    static void doThrow(Exception e) {
        Test.<RuntimeException> doThrow0(e);
    }

    static <E extends Exception> void doThrow0(Exception e) throws E {
        throw (E) e;
    }
}
Run Code Online (Sandbox Code Playgroud)

生成的字节码表示JVM并不真正关心已检查/未检查的异常:

// Method descriptor #22 (Ljava/lang/Exception;)V
// Stack: 1, Locals: 1
static void doThrow(java.lang.Exception e);
  0  aload_0 [e]
  1  invokestatic Test.doThrow0(java.lang.Exception) : void [25]
  4  return
    Line numbers:
      [pc: …
Run Code Online (Sandbox Code Playgroud)

java generics exception jls checked-exceptions

29
推荐指数
2
解决办法
4477
查看次数

Configuration.generateSchemaCreationScript()在Hibernate 5中的位置

在Hibernate 4.x中,我曾经生成并导出了注释实体中定义的模式,如下所示(使用Spring在类路径上查找带注释的实体):

Connection connection = 
    DriverManager.getConnection("jdbc:h2:mem:jooq-meta-extensions", "sa", "");

Configuration configuration = new Configuration()
    .setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");

// [...] adding annotated classes to Configuration here...

configuration.generateSchemaCreationScript(
    Dialect.getDialect(configuration.getProperties()));
SchemaExport export = new SchemaExport(configuration, connection);
export.create(true, true);
Run Code Online (Sandbox Code Playgroud)

这在Hibernate 5.0中不再有效:

除了以下内容之外,我没有在迁移指南中找到任何明显的引用变化:

从配置中删除了相当多的方法

基于一组带注释的实体,使用Hibernate 5.0在现有JDBC连接上生成和导出数据库的正确方法是什么?(基于JPA的纯解决方案也很好)

(注意,只是删除呼叫generateSchemaCreationScript()似乎工作,但我宁愿确保这是正确的)

java configuration jpa hbm2ddl hibernate-5.x

28
推荐指数
1
解决办法
9378
查看次数

注册流"完成"钩子

使用Java 8 StreamAPI,我想注册一个"完成钩子",类似于:

Stream<String> stream = Stream.of("a", "b", "c");

// additional filters / mappings that I don't control
stream.onComplete((Completion c) -> {
    // This is what I'd like to do:
    closeResources();

    // This might also be useful:
    Optional<Throwable> exception = c.exception();
    exception.ifPresent(e -> throw new ExceptionWrapper(e));
});
Run Code Online (Sandbox Code Playgroud)

我为什么要那么做的原因是因为我想包装在一个资源Stream的API客户端,消费,我想的是Stream,一旦它被消耗自动清理资源.如果可能,那么客户可以致电:

Collected collectedInOneGo =
Utility.something()
       .niceLookingSQLDSL()
       .moreDSLFeatures()
       .stream()
       .filter(a -> true)
       .map(c -> c)
       .collect(collector);
Run Code Online (Sandbox Code Playgroud)

而不是目前所需要的:

try (Stream<X> meh = Utility.something()
                            .niceLookingSQLDSL()
                            .moreDSLFeatures()
                            .stream()) {

    Collected collectedWithUglySyntacticDissonance = …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

27
推荐指数
3
解决办法
1967
查看次数