postgres 和 mysql 上的通用大写搜索不起作用
generic upper case search on postgres and mysql not working
我正在尝试对可以在任何类型的数据库中的 table 进行简单搜索。以下查询适用于大多数数据库,但我找不到适用于 mysql 的解决方案。
我数据库中的 table 是由活动对象框架生成的,因此我无法更改这些实例的名称或配置。
这是在所有数据库上都能正常工作的查询,但 MySQL:
select * 来自 "AO_69D057_FILTER" 其中 "SHARED" = true AND "CONTAINS_PROJECT" = true AND UPPER("FILTER_NAME") like UPPER('%pr%' ).
MySql 出于某种原因无法在双引号中使用 table 名称。如果我使用不带引号的 table 名称,它适用于 MySQL 但不适用于 Postgres。 Postgres 正在将 table 名称转换为小写,因为它没有被引用。 AO 正在生成大写的 table 个名称。
我也试过使用别名,但由于语句的求值层次而无法使用。
关于如何解决 table 名称问题的任何建议?
默认情况下,双引号用于列。
您可以更改它:
SET SQL_MODE=ANSI_QUOTES;
这是关于它的文档:
http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
我遇到了同样的问题。我select根据我得到的异常进行查询。在数据库搜索的第一次调用中,我尝试 不带引号 如果它失败,然后我尝试 带引号 。然后我相应地设置 useQueryWithQuotes 变量,以便在以后的调用中我不需要检查异常。下面是我正在使用的代码片段。
private Boolean useQueryWithQuotes=null;
private final String queryWithQuotes = "\"OWNER\"=? or \"PRIVATE\"=?";
private final String queryWithoutQuotes = "OWNER=? or PRIVATE=?";
public Response getReports() {
List<ReportEntity> reports = null;
if(useQueryWithQuotes==null){
synchronized(this){
try {
reports = new ArrayList<ReportEntity>( Arrays.asList(ao.find(ReportEntity.class, Query.select().where(queryWithoutQuotes, getUserKey(), false))) );
useQueryWithQuotes = false;
} catch (net.java.ao.ActiveObjectsException e) {
log("exception:" + e);
log("trying query with quotes");
reports = new ArrayList<ReportEntity>( Arrays.asList(ao.find(ReportEntity.class, queryWithQuotes, getUserKey(), false)));
useQueryWithQuotes = true;
}
}
}else{
String query = useQueryWithQuotes ? queryWithQuotes : queryWithoutQuotes;
reports = new ArrayList<ReportEntity>( Arrays.asList(ao.find(ReportEntity.class, query, getUserKey(), false)));
}
...
}
我正在尝试对可以在任何类型的数据库中的 table 进行简单搜索。以下查询适用于大多数数据库,但我找不到适用于 mysql 的解决方案。 我数据库中的 table 是由活动对象框架生成的,因此我无法更改这些实例的名称或配置。
这是在所有数据库上都能正常工作的查询,但 MySQL:
select * 来自 "AO_69D057_FILTER" 其中 "SHARED" = true AND "CONTAINS_PROJECT" = true AND UPPER("FILTER_NAME") like UPPER('%pr%' ).
MySql 出于某种原因无法在双引号中使用 table 名称。如果我使用不带引号的 table 名称,它适用于 MySQL 但不适用于 Postgres。 Postgres 正在将 table 名称转换为小写,因为它没有被引用。 AO 正在生成大写的 table 个名称。
我也试过使用别名,但由于语句的求值层次而无法使用。
关于如何解决 table 名称问题的任何建议?
默认情况下,双引号用于列。 您可以更改它:
SET SQL_MODE=ANSI_QUOTES;
这是关于它的文档: http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
我遇到了同样的问题。我select根据我得到的异常进行查询。在数据库搜索的第一次调用中,我尝试 不带引号 如果它失败,然后我尝试 带引号 。然后我相应地设置 useQueryWithQuotes 变量,以便在以后的调用中我不需要检查异常。下面是我正在使用的代码片段。
private Boolean useQueryWithQuotes=null;
private final String queryWithQuotes = "\"OWNER\"=? or \"PRIVATE\"=?";
private final String queryWithoutQuotes = "OWNER=? or PRIVATE=?";
public Response getReports() {
List<ReportEntity> reports = null;
if(useQueryWithQuotes==null){
synchronized(this){
try {
reports = new ArrayList<ReportEntity>( Arrays.asList(ao.find(ReportEntity.class, Query.select().where(queryWithoutQuotes, getUserKey(), false))) );
useQueryWithQuotes = false;
} catch (net.java.ao.ActiveObjectsException e) {
log("exception:" + e);
log("trying query with quotes");
reports = new ArrayList<ReportEntity>( Arrays.asList(ao.find(ReportEntity.class, queryWithQuotes, getUserKey(), false)));
useQueryWithQuotes = true;
}
}
}else{
String query = useQueryWithQuotes ? queryWithQuotes : queryWithoutQuotes;
reports = new ArrayList<ReportEntity>( Arrays.asList(ao.find(ReportEntity.class, query, getUserKey(), false)));
}
...
}