标签: jooq

JOOQ连接

我有这样的查询:

Result<?> result = create.select(CONSUMER.CONS_ID_NO,
                                             CONSUMER.CONS_NAME,
                                             concat(CONSUMER.AREA_CODE, "/", CONSUMER.CONS_NO, "/", CONSUMER.CAT_CODE).as("ConsNo"),
                                             CONSUMER.ARREARS)
                                            .from(CONSUMER)
                                            .fetch();
Run Code Online (Sandbox Code Playgroud)

我根据JOOQ手册写了这个,但我收到的错误是:

类型Factory中的方法concat(String ...)不适用于参数(TableField,String,TableField,String,TableField)

我正在使用JOOQ-3.

java concatenation multiple-columns jooq

8
推荐指数
1
解决办法
2616
查看次数

使用JOOQ从表中生成枚举类

我有下表YNM:

 id  name
 1   YES
 2   NO 
 3   MAYBE
Run Code Online (Sandbox Code Playgroud)

并希望JOOQ生成以下java枚举:

public enum YNM {
   YES,NO,MAYBE;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,由于过于复杂/反直觉,因此在JOOQ 3中删除了对此的支持.有没有办法实现这个目标?

提前致谢.

java mysql enums jooq

8
推荐指数
2
解决办法
1475
查看次数

如何使用Jooq insertInto复制和修改表行

我正在使用Jooq并尝试在同一个表中生成数据集的近似副本.在此过程中,我想将一个字段的值更新为已知值.我一直在看文档和尝试变化,但没有运气.这是我更新REGISTRATION表并将'stage'字段设置为值6(它为5)的方法.所以我最终会得到原始数据加上一个只有不同阶段值的重复集.在伪代码中

insert into Registration (select * from Registration where stage=5) set stage=6 
Run Code Online (Sandbox Code Playgroud)

我尝试下面的代码,并认为我可以添加一个".set(...)"方法来设置值,但似乎没有效果.

create.insertInto(REGISTRATION)
    .select(
        (selectFrom(REGISTRATION)
            .where(REGISTRATION.STAGE.eq(5))
        )
    ).execute();
Run Code Online (Sandbox Code Playgroud)

java sql rows duplicates jooq

8
推荐指数
1
解决办法
534
查看次数

jOOQ在<daos>标志设置为true时不生成DAO

我已经刷新了我的项目,干净地重建了它,用Google搜索/搜索了StackOverflow以查找类似问题,阅读了jOOQ文档,检查了构建输出是否存在潜在问题等.

<daos>在我的pom.xml中添加了一个标志来生成jOOQ数据库访问对象,因为jOOQ 3.2.0在线手册说 "可以使用daos标志激活DAO生成".根据jOOQ Advanced Codegen 文档将此标志设置为true,不仅会生成DAO,还会生成关系,记录和POJO:

<generator>
    ...
    <generate>
        <daos>true</daos>
    </generate>   
</generator>
Run Code Online (Sandbox Code Playgroud)

在将标志添加到我的pom之前,我有自动生成的记录和关系,但既没有POJO也没有DAO.添加daos标志并重建我的项目后,我还有POJO加上另外两个,但我仍然没有任何DAO.附带的屏幕截图显示了我生成的类.标志添加的类位于蓝色框中.我认为应该有一个名为"daos"的包,包含PurchaseDAO和UserDAO类.

jOOQ DAO 文档没有解释添加标志但未生成DAO的任何情况.该项目的部分重点是学习jOOQ,因此使用jOOQ类手动编码DAO无法解决我的问题.

编辑:我的SQLite从工作3.7.11模式和非工作的解决方案是在这里.

java sql eclipse sqlite jooq

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

在JOOQ中的ON DUPLICATE KEY中返回id

我真正想要的是在JOOQ中编写以下查询:

stmt = connection.prepareStatement(
    "INSERT INTO `tbl` (`name`, `service_id`, `device_id`) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE `id` = LAST_INSERT_ID(`id`)", 
    Statement.RETURN_GENERATED_KEYS
);
Run Code Online (Sandbox Code Playgroud)

我无法在JOOQ中找到一种方法.可能吗?

java mysql jooq on-duplicate-key

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

jooq单一查询与一对多关系

我有一个表格实验和一个表格标签.一个实验可能有许多标签.模式:

--------                  --------
|Table1|  1           n   |Table2|
|      | <--------------> |      |
|      |                  |      |
--------                  --------
(experiment)              (tags)
Run Code Online (Sandbox Code Playgroud)

是否可以使用jooq创建查询,返回实验和相应的标记列表.类似于结果,其中Record是一个experimentRecord,一个标签列表或一个地图.

我也有一个只返回一个结果的查询,那里有什么方便吗?

编辑:java8,最新的jooq.

java mysql sql jooq

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

使用jOOQ 3.6 +,纯SQL和javac编译器进行慢速编译

jOOQ用户组报告了以下错误.它似乎是javac编译器中的一个错误,它与编译器在使用内部DSL(如jOOQ)的上下文中完成的"复杂"类型推理工作有关.

鉴于bug的一般性质,我在Stack Overflow上记录它,以便其他人帮助应用变通方法.在高层次上,由于JEP 101:广义目标类型推断,它似乎是编译器性能回归,它是在Java 8中引入的,并且在过去已经引起了1-2个问题.

使用Maven和jOOQ 3.7在Windows上使用jdk 1.8.0_60或1.8.0_66编译以下相对无害的类大约需要20秒:

import static org.jooq.impl.DSL.field;

import org.jooq.SQLDialect;
import org.jooq.impl.DSL;

public class Test {
    public void method() {
        DSL.using(SQLDialect.MYSQL)
           .select()
           .where(DSL.trueCondition())
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
           .and(field("client.id").eq(field("client_id")))
        ;
    }
}
Run Code Online (Sandbox Code Playgroud)

pom.xml中:

<project 
        xmlns="http://maven.apache.org/POM/4.0.0" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                            http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>compilation-issues</groupId>
    <artifactId>compilation-issues</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.jooq</groupId>
            <artifactId>jooq</artifactId>
            <version>3.7.1</version>
        </dependency>
    </dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)

未出现此问题时的配置:

  • 使用jOOQ …

java compilation jooq java-8

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

JOOQ Maven插件NullPointerException

我如何解决我使用jooq-maven-plugin 3.7.3,Maven 3.3.9,Java 1.8.0_51和OS X 10.10.4获得的NullPointerException?

[错误]未能执行目标org.jooq:jooq-CODEGEN-行家:3.7.3:生成(默认CLI)项目我-应用程序:错误运行jOOQ代码生成工具:NullPointerException异常 - > [求助1] org.apache .maven.lifecycle.LifecycleExecutionException:无法执行目标org.jooq:jooq-codegen-maven:3.7.3:在项目my-app上生成(default-cli):在org.apache.maven上运行jOOQ代码生成工具时出错. org.apache.maven.life.internal.MojoExecutor.execute中的org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)中的lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) MojoExecutor.java:145)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)at org .apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)在org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)org.apache.maven.maven.DefaultMaven.doExecute(DefaultMaven.java:307)org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)atg.apache.maven .defaultMaven.execute(DefaultMaven.java:106)org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)at at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.委托在org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)的orgkeAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)atg.cathaus.plexus.invoke(Method.java:497) .codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)位于org.codehaus.plexus.classworlds.l的org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)auncher.Launcher.main(Launcher.java:356)引起:org.apache.maven.plugin.MojoExecutionException:在org.jooq.util.maven.Plugin.execute(Plugin.java:134)上运行jOOQ代码生成工具时出错在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)... 20更多引起:java. org.jooq.util.maven.Plugin.execute(Plugin.java:118)的lang.NullPointerException ... 22更多

根据Github上的代码,抛出NPE的线是

String dir = generator.getTarget().getDirectory();
Run Code Online (Sandbox Code Playgroud)

我在下面配置的目标目录确实存在,我尝试了相对路径和绝对路径以及不使用属性来设置它.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>my-app</name>
  <url>http://maven.apache.org</url>

  <properties>
    <db>myappdb</db>
    <db.driver>com.mysql.jdbc.Driver</db.driver>
    <db.jdbc>jdbc:mysql://localhost</db.jdbc>
    <db.url>${db.jdbc}/${db}</db.url>
    <db.user>root</db.user>
    <db.pass>rootpass</db.pass>

    <jaxb-api.version>2.2.6</jaxb-api.version>
    <jooq.version>3.7.3</jooq.version>
    <jooq.dialect>org.jooq.util.mysql.MySQLDatabase</jooq.dialect>
    <jooq.gen.directory>target</jooq.gen.directory>
    <jooq.gen.package>com.mycompany.app.jooq</jooq.gen.package>
    <junit.version>3.8.1</junit.version>
    <mysql.driver.version>5.1.38</mysql.driver.version>
  </properties>

  <build>

    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.jooq</groupId>
          <artifactId>jooq-codegen-maven</artifactId>
          <version>${jooq.version}</version>
          <executions>

            <execution>
              <id>jooq-generate</id>
              <phase>generate-sources</phase>
              <goals>
                <goal>generate</goal>
              </goals>
              <configuration> …
Run Code Online (Sandbox Code Playgroud)

maven jooq

7
推荐指数
0
解决办法
746
查看次数

如何摆脱名为bin $的文件

使用Jooq生成器,通过Gradle插件,我现在正在使用POJO和表,而不仅是具有正常名称的类,还有大量名称以bin $开头的文件.

它们不是必需的,因为只是昨天发生器没有制作这些文件.无论有没有一切都可行.但我不希望这个项目充斥着数十个过多的文件.

java oracle code-generation gradle jooq

7
推荐指数
2
解决办法
145
查看次数

我可以使用JOOQ作为SQL解析器吗?

我正在尝试解析Java中的SELECT语句。我熟悉JOOQ,并希望使用它。我知道它不是明确设计为SQL解析器的,实际上还不止于此,因此我想可能会有一种使用其内部解析器解析SELECT查询的方法。

我看到了一些有关如何使用Visitor模式访问一些JOOQ内部信息的信息,但是我需要使用树状结构浏览查询内部,该结构将允许分别访问查询的每个部分。我不想在所有用例中都使用Visitor模式。

这可能吗?我将如何去做?

java jooq

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