忽略JDO查询中的大小写

时间:2010-07-30 07:35:09

标签: java google-app-engine jdo datanucleus

我想从数据库中选择结果列表,但JDO查询的==运算符区分大小写。有没有办法使用单个参数从表中选择“USER”,“user”和“User”?

在MySQL中,您拥有LIKE运算符,而在Java中则拥有equalsIgnoreCase函数。但是,它们都不适用于此示例。

PersistenceManager pm = JDO.factory.getPersistenceManager();

Query query = pm.newQuery(User.class, "username == usernameParam");
query.declareParameters("String usernameParam");

List<User> results = (List<User>) query.execute(username);

2 个答案:

答案 0 :(得分:5)

您需要以不区分大小写的方式存储字段的副本 - 例如,小写,但如果可用的话,“整理情况”会更好。然后,查询。

原因是没有办法以“不区分大小写”的方式有效搜索常规索引。

答案 1 :(得分:4)

JDOQL有一些可用的String方法。查看文档here

要解决您的问题,您可以执行以下操作:

PersistenceManager pm = JDO.factory.getPersistenceManager();

Query query = pm.newQuery(User.class, "username.toUpperCase() == usernameParam");
query.declareParameters("String usernameParam");

List<User> results = (List<User>) query.execute(username.toUpperCase());