忽略JDO查询中的大小写

Vor*_*ico 3 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);
Run Code Online (Sandbox Code Playgroud)

Nic*_*son 5

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

这样做的原因是没有办法以"不区分大小写"的方式有效地搜索常规索引.

  • 这与效率低下完全相反.将数据库中的每个条目与您的查询进行比较(这是您在问题中提到的方法中的任何一种方法)都是低效的.由于同样的原因,字段上的toLowerCase()将无法正常工作. (2认同)