我有这样的查询:
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.
我有下表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中删除了对此的支持.有没有办法实现这个目标?
提前致谢.
我正在使用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) 我已经刷新了我的项目,干净地重建了它,用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模式和非工作的解决方案是在这里.
我真正想要的是在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中找到一种方法.可能吗?
我有一个表格实验和一个表格标签.一个实验可能有许多标签.模式:
-------- --------
|Table1| 1 n |Table2|
| | <--------------> | |
| | | |
-------- --------
(experiment) (tags)
Run Code Online (Sandbox Code Playgroud)
是否可以使用jooq创建查询,返回实验和相应的标记列表.类似于结果,其中Record是一个experimentRecord,一个标签列表或一个地图.
我也有一个只返回一个结果的查询,那里有什么方便吗?
编辑:java8,最新的jooq.
向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-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更多
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) 使用Jooq生成器,通过Gradle插件,我现在正在使用POJO和表,而不仅是具有正常名称的类,还有大量名称以bin $开头的文件.
它们不是必需的,因为只是昨天发生器没有制作这些文件.无论有没有一切都可行.但我不希望这个项目充斥着数十个过多的文件.
我正在尝试解析Java中的SELECT语句。我熟悉JOOQ,并希望使用它。我知道它不是明确设计为SQL解析器的,实际上还不止于此,因此我想可能会有一种使用其内部解析器解析SELECT查询的方法。
我看到了一些有关如何使用Visitor模式访问一些JOOQ内部信息的信息,但是我需要使用树状结构浏览查询内部,该结构将允许分别访问查询的每个部分。我不想在所有用例中都使用Visitor模式。
这可能吗?我将如何去做?