JOOQ可以对指定的列执行“插入选择”语法吗?我进行了几次尝试。
表格:
table1(预期插入)
id column1 column2 column3 ...时间戳 1 John Leo null 2012/1/28 23:32:23(预期插入)
表2
id col1 col2 col3 101约翰xxx xxx(来自table2.col1) 102 xxx xxx xxx xxx
表3
id col1 col2 col3 101 xxx狮子座xxx(来自table3.col2) 102 xxx xxx xxx xxx
id column1 column2 column3 ... timestamp 1 John Leo null 2012/1/28 23:32:23 (Expected insert)
JOOQ代码:
id col1 col2 col3 101 John xxx xxx (from table2.col1) 102 xxx xxx xxx
JOOQ显示错误消息:
The number of values must match the number of fields
Run Code Online (Sandbox Code Playgroud)
任何人都知道我遇到了什么问题以及如何解决我的JOOQ代码。谢谢,付钱。
参考: …
我无法从我知道存在且我知道格式的数据库中获取数据。
在下面的代码片段中,“if conn != null”只是一个验证数据库名称、表名称等是否正确的测试,它们确实会验证。
下面的最后一行是产生异常的原因
public static HashMap<Integer, String> getNetworkMapFromRemote(DSLContext dslRemote, Connection conn, Logger logger) {
HashMap<Integer,String> remoteMap = new HashMap<Integer, String>();
// conn is only used for test purposes
if (conn != null) {
// test to be sure database is ok
try
{
ResultSet rs = conn.createStatement().executeQuery("SELECT networkid, name FROM network");
while (rs.next()) {
System.out.println("TEST: nwid " + rs.getString(1) + " name " + rs.getString(2));
}
rs.close();
}
catch ( SQLException se )
{
logger.trace("getNetworksForDevices SqlException: " …Run Code Online (Sandbox Code Playgroud) 我有一个这样的查询
Select Folder.name from FROM FolderTable,ValidFolder, ValidFolderGroup, ValidUser,
ValidLocation, ValidDepartment where ValidUser.LocationCode *= ValidLocation.LocationCode
and ValidUser.DepartmentCode *= ValidDepartment.DepartmentCode and Folder.IssueUser =
ValidUser.UserId and ValidFolder.FolderType = Folder.FolderType and
ValidFolderGroup.FolderGroupCode = ValidFolder.FolderGroupCode and
ValidFolderGroup.GroupTypeCode = 13 and (ValidUser.UserId='User' OR
ValidUser.ManagerId='User') and ValidFolderGroup.GroupTypeCode = 13 and
Folder.IssueUser = 'User'
Run Code Online (Sandbox Code Playgroud)
现在这里所有以Valid缓存表开头的表,所以这些表已经包含数据。
假设如果有人使用JOOQ或Hibernate,哪一个是最好的选择
Hibernate或者JOOQ它已经有表的 Java 类并且Valid表已经拥有所有数据?我已经看到JOOQ可以在我们使用.selectFrom(TABLE)或 时自动返回POJO.fetchInto(POJO.class);
但是有可能将复杂查询的结果转换为多个POJO吗?
示例:
此查询将所有列的数组返回到表Support和Box中.可以将它们转换为Support和Box Pojo吗?
Result<Record> results = query.select()
.from(BOX)
.join(SUPPORT)
.on(SUPPORT.ID.equal(BOX.SUPPORT_ID))
.where(SUPPORT.ID.equal("XXXX"))
.orderBy(BOX.ID)
.fetch();
Run Code Online (Sandbox Code Playgroud)
我测试了这个方法.intoGroups(SUPPORT.ID, Box.class),它运行正常.但我没有支持对象.
我在 Heroku 上的应用程序使用 DATABASE_URL。这很容易用 Java 解析为带有用户名和密码的 JDBC URL。那里没有问题。但是,我有一个带有 maven 插件的 JOOQ 生成器和 Flyway 迁移器,我不知道如何将这些插件需要的 JDBC URL、用户名和密码获取到 maven 中。所以目前我在应用程序启动时这样做,这并不理想。当我的应用程序启动时,我会获取 DATABASE_URL,解析它,然后执行 flyway 迁移和 jOOQ 代码生成。但我希望这发生在实际构建过程中,而不是在应用程序启动期间。
基本上我需要格式为 (postgres://user:pass@ec2-host:1234/path-to-db) 的 Heroku 环境变量可以在 maven 中作为这样的属性访问 (jdbc:postgresql://ec2-host :1234?user=user&password=pass)。
我认为解决方案可能在于 maven build helper 插件,但我无法完全正确地获得正则表达式属性规范。
谢谢
我在JOOQ中有一个问题.如何在jooq中使用有符号整数类型,因为它不允许将其强制转换为UIntegers.我在这个相同的方法中得到了错误.
public List<Movies> getMovie(int movid) {
return dsl.select().from(MOVIES).where(MOVIES.MOVIE_ID.equal(movid)).limit(1).fetch().into(Movies.class);
}
Run Code Online (Sandbox Code Playgroud) 我已经为MySQL设置了JOOQ。各种表的编译已完成,现在我尝试运行以下查询:
dsl.selectFrom(WALLPAPER).where(WALLPAPER.PARENT_ID.eq(id)).orderBy(WALLPAPER.VIEW_ORDER).fetchInto(WallpaperItem.class);
但我不断收到这个错误
"org.springframework.jdbc.BadSqlGrammarException: jOOQ; bad SQL grammar [select "library"."wallpaper"."id", "library"."wallpaper"."category_name", "library"."wallpaper"."icon", "library"."wallpaper"."view_order", "library"."wallpaper"."parent_id" from "library"."wallpaper" where "library"."wallpaper"."parent_id" = cast(? as int) order by "library"."wallpaper"."view_order" asc]; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '."wallpaper"."id", "library"."wallpaper"."category_name", "library"."wallpaper' at line 1
可能是什么问题?
你好我有一个方法来计算数据库中的值,我使用jooq然后迭代结果来进行求和,聚合一些字段.我的问题是我可以在jooq语句中执行所有操作,而不必遍历我的resultSet并手动添加它们吗?这是我到目前为止所做的:谢谢.
BigDecimal dealDiscountAmt = BigDecimal.ZERO;
BigDecimal standardAmtOneTimeTrue = BigDecimal.ZERO;
BigDecimal standardAmtOneTimeFalse = BigDecimal.ZERO;
BigDecimal oneTimeFalseX12 = BigDecimal.ZERO;
/** Dao for jooq access to db. */
@Resource(name = "dmDaoContext")
protected DSLContext dmDao_;
List<JDealMetricWorkflowCriteriaRecord> retValList = new ArrayList<JDealMetricWorkflowCriteriaRecord>();
JDealMetricWorkflowCriteriaRecord newDealRecord = new JDealMetricWorkflowCriteriaRecord();
List<JMetricServicePxvRecord> records = dmDao_.selectFrom(METRIC_SERVICE_PXV)
.where(METRIC_SERVICE_PXV.DEAL_ID.eq(dealId), METRIC_SERVICE_PXV.PRODUCED_DATETIME.eq(whenProduced))
.fetch();
for (JMetricServicePxvRecord record : records) {
//sum all dealDiscounts
dealDiscountAmt = dealDiscountAmt.add(record.getStandardTotalPxv().subtract(record.getProposedTotalPxv());
if (record.getOneTime()) {
//sum all dealDiscounts if oneTime is true
standardAmtOneTimeTrue = standardAmtOneTimeTrue.add(record.getStandardTotalPxv().subtract(record.getProposedTotalPxv());
} else {
//sum all dealDiscounts if …Run Code Online (Sandbox Code Playgroud) 我想将Postgres数据库表与Jooq记录列表同步。
我有一个带有复合主键和每行中其他三个值的表
table(k1, k2, v1, v2, v3)
Run Code Online (Sandbox Code Playgroud)
例如,数据可能是
Last, First, Age, Weight, Height
Smith, Joe, 21, 75, 160
Jones, Pete, 23, 80, 180
Run Code Online (Sandbox Code Playgroud)
(请使用名称作为主键的不良形式。。。)
我的Java代码中也有该表的Jooq记录列表。假设有两个Java记录
[
<Smith, Joe, 21, 75, 180>,
<Taylor, Mark, 54, 90, 170>
]
Run Code Online (Sandbox Code Playgroud)
我想发生的是当我运行一些代码时,
我设法创建了一个执行前两部分的功能,但是卡在了第三部分上。我希望在JOOQ中有一个非常简单的“一个班轮”,基本上
delete
from my_table
where (first, last) not in (values ('Joe', 'Smith'), ('Mark', 'Taylor'))
Run Code Online (Sandbox Code Playgroud)
但是我无法解决相应的Java代码。
有任何Jooq大师在阅读此书吗?
我有明显的事情要注意吗?
也许我在滥用jOOQ,因为我正努力在其他地方为这个用例找到解决方案.
我想将自己的方法应用于jOOQ查询中的某些行,类似于:
create
.update(USER)
.set(USER.EMAIL, hash(EMAIL))
.where(USER.ID.in(userIdsToUpdate))
.execute();
Run Code Online (Sandbox Code Playgroud)
哪里hash(EMAIL)会返回电子邮件的哈希版本.
显然这种语法无效,但希望它传达了我的意图.
用jOOQ支持这样的东西吗?