5

http://openhms.sourceforge.net/sqlbuilder/から Java と SQLBuilder を使用しており、 SQL SELECT クエリを動的に構築しようとしています。

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

ただし、次のような文字列を作成します。

SELECT * FROM table1 WHERE ('column1' LIKE 'A')

引用符 ( ) が間違っているため、'column1'正しく動作しません。.like()メソッドに Column オブジェクトが必要だと思います。適切な引用符でクエリを作成する方法はありますか?

4

4 に答える 4

4

私は解決策を見つけました。列名Columnを拡張 してパラメーターとして渡す新しいクラスを作成する必要がありました。CustomSql

public class Column extends CustomSql {
   public Column(String str) {
      super(str);
   }
}

その後:

SelectQuery sql = new SelectQuery();
sql.addAllColumns().addCustomFromTable("table1");
sql.addCondition(BinaryCondition.like(new Column("column1"), "A"));

または、独自のクラスを作成せずに:

SelectQuery sql = new SelectQuery();
sql.addAllColumns().addCustomFromTable("table1");
sql.addCondition(BinaryCondition.like(new CustomSql("column1"), "A"));

次の SQL クエリが作成され、正常に動作します。

SELECT * FROM table1 WHERE (column1 LIKE 'A')
于 2016-09-26T10:11:55.303 に答える
1

BinaryCondition.like() は Object を受け取り、内部で使用Column Objectするように変換されます。単純な文字列オブジェクトを渡すことができるそれぞれに andとinという名前のメソッドがあります。これを試して問題を解決してください:SqlObjectConverter.toColumnSqlObject(Object)findColumn(String columnName)findSchema(String tableName)Class DbTableClass DbSchema

 DbTable table1= schema.findSchema("table1");
 DbColumn column1 = table1.findColumn("column1");

 SelectQuery sql = new SelectQuery();
 sql.addAllColumns().addCustomFromTable(table1);
 sql.addCondition(BinaryCondition.like(column1, "A"));
于 2016-09-25T16:07:30.230 に答える
0

このライブラリ JDSQL を見てください (Java 8 が必要です):

JQuery jquery = new JQuery();
    Collection<Map<String, Object>> result = jquery.select("tbl1::column1", "tbl2::column2") //Select column list
                                                .from("Table1" , "TB1") // Specifiy main table entry, and you can add alias
                                                .join("Table2::tb2") // Provide your join table, and another way to provide alias name
                                                .on("tbl1.key1", "tbl2.key1") // your on statement will be based on the passed 2 values equaliy 
                                                .join("Table3", "tbl3", true) // Join another table with a flag to enable/disable the join (Lazy Joining)
                                                .on("tbl2.key2", "tbl3.key1", (st-> {st.and("tbl3.condition = true"); return st;}))
                                                .where("tbl1.condition", true, "!=") // Start your where statment and it also support enable/disable flags 
                                                .and("tbl2.condition = true", (st-> {st.or("tbl.cond2", 9000, "="); return st;})) // And statment that is grouping an or inside parentheses to group conditions  
                                                .and("tbl3.cond3=5", false) // And statment with a flag to enable/disable the condition 
                                                .get((String sql, Map<String, Object> parameters)-> getData(sql, parameters)); // Passing the hybrid getter. 
                                                                //You can also assign the getter at the jqueryobject itself by calling setGetter.
}

private static Collection<Map<String, Object>> getData(String sql, Map<String, Object> parameters){



    return null;

}

}

于 2016-09-29T16:57:42.967 に答える