首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sqlbuilder构建SELECT查询?

如何使用sqlbuilder构建SELECT查询?
EN

Stack Overflow用户
提问于 2016-09-25 23:22:36
回答 4查看 4.2K关注 0票数 5

我正在使用来自http://openhms.sourceforge.net/sqlbuilder/的Java和SQLBuilder,并试图动态地构建SQL SELECT查询:

代码语言:javascript
复制
SelectQuery sql = new SelectQuery();
sql.addAllColumns().addCustomFromTable("table1");
sql.addCondition(BinaryCondition.like("column1", "A"));

但是,它会创建如下字符串:

代码语言:javascript
复制
SELECT * FROM table1 WHERE ('column1' LIKE 'A')

由于错误的引号('column1'),它不能正常工作。我认为它在.like()方法中需要一些Column对象。有没有办法用正确的引号创建查询?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-26 18:11:55

我找到了一个解决方案。我必须创建扩展CustomSql的新类Column,并将我的列名作为参数传递:

代码语言:javascript
复制
public class Column extends CustomSql {
   public Column(String str) {
      super(str);
   }
}

然后:

代码语言:javascript
复制
SelectQuery sql = new SelectQuery();
sql.addAllColumns().addCustomFromTable("table1");
sql.addCondition(BinaryCondition.like(new Column("column1"), "A"));

或者不创建自己的类:

代码语言:javascript
复制
SelectQuery sql = new SelectQuery();
sql.addAllColumns().addCustomFromTable("table1");
sql.addCondition(BinaryCondition.like(new CustomSql("column1"), "A"));

它创建了以下SQL查询,可以很好地工作:

代码语言:javascript
复制
SELECT * FROM table1 WHERE (column1 LIKE 'A')
票数 4
EN

Stack Overflow用户

发布于 2016-09-26 00:07:30

BinaryCondition.like()接受作为Column Object的对象,然后在内部使用Converter.toColumnSqlObject(Object)将其转换为SqlObject。在Class DbTableClass DbSchema中分别有一个名为findColumn(String columnName)findSchema(String tableName)的方法,您可以在其中传递一个简单的String对象。试试这个,它会解决你的问题:

代码语言:javascript
复制
 DbTable table1= schema.findSchema("table1");
 DbColumn column1 = table1.findColumn("column1");

 SelectQuery sql = new SelectQuery();
 sql.addAllColumns().addCustomFromTable(table1);
 sql.addCondition(BinaryCondition.like(column1, "A"));
票数 1
EN

Stack Overflow用户

发布于 2016-09-26 18:19:57

请检查工作示例并重构您自己的查询

代码语言:javascript
复制
String query3 =
      new SelectQuery()
      .addCustomColumns(
          custNameCol,
          FunctionCall.sum().addColumnParams(orderTotalCol))
      .addJoins(SelectQuery.JoinType.INNER, custOrderJoin)
      .addCondition(BinaryCondition.like(custNameCol, "%bob%"))
      .addCondition(BinaryCondition.greaterThan(
                        orderDateCol,
                        JdbcEscape.date(new Date(108, 0, 1)), true))
      .addGroupings(custNameCol)
      .addHaving(BinaryCondition.greaterThan(
                     FunctionCall.sum().addColumnParams(orderTotalCol),
                     100, false))
      .validate().toString();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39688531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档