鉴于以下Oracle sql查询为PreparedStatement:
SELECT *
FROM my_table
WHERE field1 = 'foo'
and field2 =ANY (substr( ? , 1, 2) || '00000000',
substr( ? , 1, 4) || '000000',
substr( ? , 1, 6) || '0000',
substr( ? , 1, 8) || '00',
?
)
Run Code Online (Sandbox Code Playgroud)
我想翻译成JPQL查询.阅读JPQL文档,substr变得substring
并ANY保持不变.在JPQL中ANY需要一个子查询.
如何将列表更改为子查询?或者我应该使用IN运算符还是应该生成带有一堆OR条件的JPQL字符串?
Oracle 10gR2
Java 5
JPA 2
如何在Oracle标识符中转义双引号字符?
这不起作用:
CREATE TABLE "foo""bar" ("xxx" CHAR(1))
Run Code Online (Sandbox Code Playgroud) 我无法从我知道存在且我知道格式的数据库中获取数据。
在下面的代码片段中,“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) 我有下表:
CREATE TABLE "MIGRATION"."VERSION"
(
ID BIGINT PRIMARY KEY NOT NULL GENERATED BY DEFAULT AS IDENTITY,
VERSION_DATE timestamp DEFAULT CURRENT TIMESTAMP NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
我想在该表中插入一个"新行"但由于所有内容都是自动生成的,我该怎么办呢?
INSERT INTO "MIGRATION"."VERSION" VALUES();
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) 我有一个从表中选择人员的查询。
SelectConditionStep<PersonRecord> select = context
.selectFrom(Tables.PERSON)
.where(Tables.PERSON.ISDELETED.eq(false));
if(searchValue != null && searchValue.length() > 0){
select.and(Tables.PERSON.LASTNAME.likeIgnoreCase(String.format("%%%s%%", searchValue)));
}
List<PersonRecord> dbPersons = select
.orderBy(Tables.PERSON.LASTNAME, Tables.PERSON.FIRSTNAME, Tables.PERSON.ID)
.limit(length).offset(start)
.fetch();
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大师在阅读此书吗?
我有明显的事情要注意吗?
我想执行这样的查询:
SELECT Table1.COL1,
Table1.COL2,
(SELECT SUM(Table2.COL3)
FROM Table2
WHERE Table2.UID = Table1.UID) SUMOF
FROM Table1;
Run Code Online (Sandbox Code Playgroud)
我该怎么做?我通常创建一个Criteria添加,只ProjectionList填充.
我创建了一个来计算... COL1COL2DetachedCriteriasum
现在,如何将这个分离的标准附加到主要标准?我的直觉说 - 这是某种需要添加到列表中的Projection,但我不知道如何.此外,不确定WHERE Table2.COL4 = Table1.COL5分离标准的工作原理.
此外,我确信此查询可能以不同的方式编写,例如使用join语句.如果有这样的方式运行它仍然很有趣.
DetachedCriteria 和主要的 CriteriaDetachedCriteria detachedCriteria = DetachedCriteria.forClass(Table2.class, "table2");
detachedCriteria
.setProjection(
Projections.projectionList()
.add(Projections.sum("table2.col3"), "sumCol3")
)
.add(Restrictions.eq("table2.uid", "table1.uid"))
;
Criteria criteria = session.createCriteria(Table1.class, "Table1");
criteria
.setProjection(
Projections.projectionList()
.add(Projections.property("Table1.col1"), "col1")
.add(Projections.property("Table1.col2"), "col2")
)
;
Run Code Online (Sandbox Code Playgroud)
@Entity
@Table(name = "Table1")
public class Table1 {
@Id
@Column(name = "uid")
public String …Run Code Online (Sandbox Code Playgroud) 在 Oracle 中,我们可以编写它来使用SELECT语句生成单行。
SELECT 1 AS x FROM dual
Run Code Online (Sandbox Code Playgroud)
Teradata 的等价物是什么?