Select 获取一个返回 null 的结果
Select fetch one result returning null
当我使用此语句时,它没有 return 结果。
Result<Record> result = (Result<Record>) jooq
.select()
.from("Employees")
.where(DSL.cast("FirstName", MySQLDataType.BINARY)
.eq(DSL.cast(firstName, MySQLDataType.BINARY)))
.fetchOne();
我只想select一个结果。
结构:
--
-- Table structure for table `Employees`
--
CREATE TABLE IF NOT EXISTS `Employees` (
`id` int(11) NOT NULL,
`FirstName` varchar(100) NOT NULL,
`LastName` varchar(150) NOT NULL,
`Age` tinyint(4) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
我想 select 是杰克,它存在,但 return 是空的。
示例:
SELECT * FROM Employees WHERE FirstName = Jack;
这个:
// Assuming this static import
import static org.jooq.impl.DSL.*;
cast("FirstName", MySQLDataType.BINARY)
会生成如下SQL
-- With a bind variable:
CAST(? AS BINARY)
-- If you're inlining bind variables:
CAST('FirstName' AS BINARY)
因此,这不是指您的 `FirstName`
列,而是指 'FirstName'
字符串值。你真正想做的是:
cast(field(name("FirstName")), MySQLDataType.BINARY);
哪个会生成
CAST(`FirstName` AS BINARY)
关于区分大小写的一般说明
如果您在 DDL 中的 table / 列名称周围使用反引号,您应该始终注意 jOOQ 中对象名称的大小写敏感性。理想情况下,您将使用我的回答中指示的 DSL.name()
方法来创建区分大小写的名称。这也适用于您的 Employees
table,它不区分大小写地添加到您的 SQL 语句中:
from("Employees") // Generates a "plain SQL", case-insensitive table Employees
我建议你改为这样写:
from(name("Employees")) // Generates a case-sensitive table identifier `Employees`
之所以有效是因为MySQL doesn't know case sensitive table names on Windows by default.
手册参考
我建议阅读有关 "plain SQL" 和 "identifiers" 的 jOOQ 手册部分以帮助澄清事情:
当我使用此语句时,它没有 return 结果。
Result<Record> result = (Result<Record>) jooq
.select()
.from("Employees")
.where(DSL.cast("FirstName", MySQLDataType.BINARY)
.eq(DSL.cast(firstName, MySQLDataType.BINARY)))
.fetchOne();
我只想select一个结果。
结构:
--
-- Table structure for table `Employees`
--
CREATE TABLE IF NOT EXISTS `Employees` (
`id` int(11) NOT NULL,
`FirstName` varchar(100) NOT NULL,
`LastName` varchar(150) NOT NULL,
`Age` tinyint(4) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
我想 select 是杰克,它存在,但 return 是空的。
示例:
SELECT * FROM Employees WHERE FirstName = Jack;
这个:
// Assuming this static import
import static org.jooq.impl.DSL.*;
cast("FirstName", MySQLDataType.BINARY)
会生成如下SQL
-- With a bind variable:
CAST(? AS BINARY)
-- If you're inlining bind variables:
CAST('FirstName' AS BINARY)
因此,这不是指您的 `FirstName`
列,而是指 'FirstName'
字符串值。你真正想做的是:
cast(field(name("FirstName")), MySQLDataType.BINARY);
哪个会生成
CAST(`FirstName` AS BINARY)
关于区分大小写的一般说明
如果您在 DDL 中的 table / 列名称周围使用反引号,您应该始终注意 jOOQ 中对象名称的大小写敏感性。理想情况下,您将使用我的回答中指示的 DSL.name()
方法来创建区分大小写的名称。这也适用于您的 Employees
table,它不区分大小写地添加到您的 SQL 语句中:
from("Employees") // Generates a "plain SQL", case-insensitive table Employees
我建议你改为这样写:
from(name("Employees")) // Generates a case-sensitive table identifier `Employees`
之所以有效是因为MySQL doesn't know case sensitive table names on Windows by default.
手册参考
我建议阅读有关 "plain SQL" 和 "identifiers" 的 jOOQ 手册部分以帮助澄清事情: