此查询有什么问题?
select author_num from (henry_author where (contains(author_first,'Albert') > 0))
继续给我一个错误,错过了一个右括号?
答案 0 :(得分:1)
SELECT author_num FROM henry_author WHERE author_first LIKE '%Albert%';
或者,可能更好地解决数据不一致问题:
SELECT author_num FROM henry_author WHERE UPPER(author_first) LIKE '%ALBERT%';
%
是一个匹配零个或多个字符的通配符。因此,%ALBERT%
表示任何事情都可以在“ALBERT”之前或之后,这实际上是您的contains()
函数所做的事情。
UPPER
只是一个将字符串转换为大写字符的函数,这使得处理潜在的数据不一致变得更容易,即。有人打电话给阿尔伯特'而不是' Albert'等
由于您正在使用JDBC,因此您可能希望将查询结构化为使用PreparedStatement
,这样您就可以参数化查询:
final String sqlSelectAuthorNum = "SELECT author_num FROM henry_author WHERE UPPER(author_first) LIKE ?";
final PreparedStatement psSelectAuthorNum = conn.prepareStatement(sqlSelectAuthorNum);
// now execute your query someplace in your code.
psSelectAuthorNum.setString(1, "%" + authorName + "%");
final ResultSet rsAuthorNum = psSelectAuthorNum.executeQuery();
if (rsAuthorNum.isBeforeFirst()) {
while (rsAuthorNum.next()) {
int authorNumber = rsAuthorNum.getInt(1);
// etc...
}
}