如何使用 Gradle 和 Mysql 为单个数据库配置 jooq
Posted
技术标签:
【中文标题】如何使用 Gradle 和 Mysql 为单个数据库配置 jooq【英文标题】:How do I configure jooq with Gradle and Mysql for a single database 【发布时间】:2017-08-17 19:11:03 【问题描述】:我正在尝试使用 jooq 从 gradle 自动加载配置,但很难按照指南进行操作。
我终于让它加载数据,但到目前为止我只能让所有数据库工作(通过让database()
块为空白)。
我下面的代码尝试只加载一个数据库。
buildscript
repositories
mavenCentral()
maven
name 'JFrog OSS snapshot repo'
url 'https://oss.jfrog.org/oss-snapshot-local/'
jcenter()
dependencies
classpath 'org.jooq:jooq-codegen:3.9.1'
classpath group: 'mysql', name: 'mysql-connector-java', version: '6.0.6'
apply plugin: 'application'
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'antlr'
repositories
mavenLocal()
mavenCentral()
jcenter()
dependencies
//compile group: 'com.github.javaparser', name: 'javaparser-core', version: '3.0.0-alpha.2'
compile group: 'com.github.javaparser', name: 'java-symbol-solver-core', version: '0.5.2'
compile 'org.jooq:jooq:3.9.1'
runtime group: 'mysql', name: 'mysql-connector-java', version: '6.0.6'
testCompile "junit:junit:latest.release"
idea
module
excludeDirs += file('src/main/resources')
// Use your favourite XML builder to construct the code generation configuration file
// ----------------------------------------------------------------------------------
def writer = new StringWriter()
def xml = new groovy.xml.MarkupBuilder(writer)
.configuration('xmlns': 'http://www.jooq.org/xsd/jooq-codegen-3.9.0.xsd')
jdbc()
driver('com.mysql.cj.jdbc.Driver')
url('jdbc:mysql://127.0.0.1/graphUpgrade?serverTimezone=UTC')
user('parseUser')
password('password')
generator()
database()
name('org.jooq.util.mysql.MySQLDatabase')
inputSchema('graphUpgrade')
includes('.*')
// Watch out for this caveat when using MarkupBuilder with "reserved names"
// - https://github.com/jOOQ/jOOQ/issues/4797
// - http://***.com/a/11389034/521799
// - https://groups.google.com/forum/#!topic/jooq-user/wi4S9rRxk4A
generate([:])
pojos true
daos true
target()
packageName('us.klingman.codeParser.db')
directory('src/main/java')
print writer.toString()
// Run the code generator
// ----------------------
org.jooq.util.GenerationTool.generate(
javax.xml.bind.JAXB.unmarshal(new StringReader(writer.toString()), org.jooq.util.jaxb.Configuration.class)
)
运行此代码会产生以下错误:
Error while fetching tables
java.lang.NullPointerException
at org.jooq.util.AbstractElementContainerDefinition.<init>(AbstractElementContainerDefinition.java:79)
at org.jooq.util.AbstractElementContainerDefinition.<init>(AbstractElementContainerDefinition.java:75)
at org.jooq.util.AbstractTableDefinition.<init>(AbstractTableDefinition.java:68)
at org.jooq.util.mysql.MySQLTableDefinition.<init>(MySQLTableDefinition.java:70)
at org.jooq.util.mysql.MySQLDatabase.getTables0(MySQLDatabase.java:256)
at org.jooq.util.AbstractDatabase.getTables(AbstractDatabase.java:1137)
at org.jooq.util.AbstractDatabase.getTable(AbstractDatabase.java:1163)
at org.jooq.util.AbstractDatabase.getTable(AbstractDatabase.java:1158)
at org.jooq.util.mysql.MySQLDatabase.getEnums0(MySQLDatabase.java:295)
at org.jooq.util.AbstractDatabase.getEnums(AbstractDatabase.java:1182)
at org.jooq.util.JavaGenerator.generateSchemaIfEmpty(JavaGenerator.java:334)
at org.jooq.util.JavaGenerator.generateCatalogIfEmpty(JavaGenerator.java:323)
at org.jooq.util.JavaGenerator.generate(JavaGenerator.java:297)
at org.jooq.util.GenerationTool.run(GenerationTool.java:610)
at org.jooq.util.GenerationTool.generate(GenerationTool.java:199)
at org.jooq.util.GenerationTool$generate.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at build_87hklhc6v691dvh83y5ogqnvl.run(/Users/lorenklingman/Sites/code-search-parser/build.gradle:79)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:74)
最后,为了完整起见,这里是为所有数据库生成的文件。
【问题讨论】:
build.gradle
中的第79行是哪一个?
javax.xml.bind.JAXB.unmarshal(new StringReader(writer.toString()), org.jooq.util.jaxb.Configuration.class)
【参考方案1】:
相信你在这里遇到过这个问题:#5213
确保在 jOOQ 配置中也始终使用 exact 大写/小写的数据库名称。此外,在 MySQL 和 MariaDB 中有一些区分大小写的注意事项,具体取决于操作系统。这些警告可能会影响除 jOOQ 之外的其他工具。相关信息也在#5213。
【讨论】:
我想我已经做到了,除非你在某个地方看到我错误的大小写 graphUpgrade 是确切的大小写。如果我在inputSchema
中使用 graphupgrade,我会得到一个不同的错误,即没有模式与我请求的匹配。
@Loren:对不起,我的评论错误/不完整。我已经修好了。你试过只用小写命名你的数据库吗?
对于未来的用户,最好直接在答案中添加大小写。也许“此外,MySQL 和 MariaDB 中存在一些区分大小写的警告,具体取决于操作系统。这些可以通过将数据库命名为全部小写来避免。”还有需要的人,如何在 MySQL/MariaDB 中重命名数据库***.com/a/1072988/3854385以上是关于如何使用 Gradle 和 Mysql 为单个数据库配置 jooq的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP 和 MYSQL 在单个单元格数据库中插入/存储多个项目
如何将数据从多个输入字段转换为单个 JSON 对象以进一步将其插入单个 mysql 字段