StringBuilder、SQLBuilder、SQLStringBuilderの説明と使用¶
複雑なSQL分を用意するときに、SQL文法を軽量化、使いやすい、StringBuilder、SQLBuilder、SQLStringBuilderの正確理解と使用が必要である。
StringBuilder¶
StringBuilderは可変の文字列、ひとりでスレッドの場合。もしにマルチスレッドは、安全でない。このとき、StringBufferを使ってください。 StringBuilderの主要な操作はappendとinsertメソッド、すべての方法も有効には、特定の文字列データに変換、そしてその文字列の文字を生成器で添加や加入。 例えば: StringBuilder sb = new StringBuilder(); sb.append(x)とsb.insert(sb.length(), x)は同じを収めた。
SQLBuilder¶
SQLBuilderはJavaプログラムに苦痛なSQL查询を避ける。複雑なSQL分を用意するときに、下記の二つを避けたい場合は難しくなります。
- 子検索同じになる場合は、重複SQL分はたくさんあります。
- 子検索を含め、長くなる場合は、SQL分対してコメントを追加することが難しいです。
その二つを退避するために、複雑なSQL分を必要になる場合は本クラスを利用してください。
下記はじょうようのSQLBuilder函数例を挙げる:
|{background:#CCCCCC;width:500px}.注釈|{background:#CCCCCC;width:500px}.SQLBuilder函数例|_{background:#CCCCCC;width:500px}.SQL語句|
SQL:SELECTの検索項目を用意する,columns:検索項目を引数として、複数渡せること,distinct:DISTINCTを付けるかどうか
1 | Sql.buildSelect(String[] columns, boolean distinct) |
|
1 2 3 4 5 6 7 | SqlBuilder sql = new SqlBuilder(); sql.selectDistinct(FIELD_SHEETNUMBER); public SqlBuilder selectDistinct(String... columns) { buildSelect(columns, true); return this; } |
|
1 2 | SELECT DISTINCT FIELD_SHEETNUMBER |
|
SQL:SELECT FROMの内容:どこから検索するか、子検索appendx文字フィールド。 subQuery:子検索のオブジェクト appendx:検索の文字フィールド
1 | Sql.buildSubFrom(SqlBuilder subQuery, String... appendx) |
1 2 3 | public SqlBuilder from(SqlBuilder subQuery, String... appendx) { return buildSubFrom(subQuery, appendx); } |
1 | FROM (subQuery) String... appendx |
|
SQL:子検索の左結合 subQuery:子検索のオブジェクト aliasTableName:テーブル完成
1 | join(SqlBuilder subQuery, String aliasTableName) |
1 | join(SqlBuilder subQuery, String aliasTableName) |
1 | LEFT_OUTER_JOIN (subQuery) AS aliasTableName |
|
SQLStringBuilder¶
このSQLデータベースオブジェクトに送られるsqlクエリを構築するのを手伝うconvienceクラス。
|{background:#CCCCCC;width:500px}.注釈|{background:#CCCCCC;width:500px}.SQLBuilder函数例|_{background:#CCCCCC;width:500px}.SQL語句| |
[FIELD =?]のような検索条件式を生成すること
1 | SQLStringBuilder.buildSelection(String field) |
|
1 | String selection = SQLStringBuilder.buildSelection(FIELD_ITEMSELECTCODE); |
|
1 2 | private static final String QUESTION = "=?"; String selection = FIELD_ITEMSELECTCODE + QUESTION; |
|
[FIELD1 =? AND FIELD2 =? AND FIELD3 =? AND FIELD4 =?]のような検索条件式を生成すること
1 | SQLStringBuilder.buildSelection(String[] fields) |
[FIELD1 =? OR FIELD2 =? OR FIELD3 =? OR FIELD4 =?]のような検索条件式を生成すること
1 | SQLStringBuilder.buildSelectionOr(String[] fields) |
1 2 3 | String[] selectFields = {FIELD_ITEMSELECTCODE,FIELD_PRICESELECTCODE}; String selectionAnd = SQLStringBuilder.buildSelection(selectFields ); String selectionOr = SQLStringBuilder.buildSelectionOr(selectFields ); |
1 2 3 4 5 | private static final String QUESTION = "=?"; private static final String AND = "AND"; private static final String OR = "OR"; String selectionAnd = FIELD_ITEMSELECTCODE + QUESTION + AND + FIELD_PRICESELECTCODE+ QUESTION; String selectionOr = FIELD_ITEMSELECTCODE + QUESTION + OR + FIELD_PRICESELECTCODE+ QUESTION; |
|
[FIELD LIKE '?']のような検索条件式を生成すること
1 | SQLStringBuilder.buildSelectionLike(String field) |
[FIELD1 LIKE ? AND FIELD2 LIKE ? AND FIELD3 LIKE ? AND FIELD4 LIKE ?]のような検索条件式を生成すること
1 | SQLStringBuilder.buildSelectionLike(String[] fields) |
[FIELD1 LIKE ? OR FIELD2 LIKE ? OR FIELD3 LIKE ? OR FIELD4 LIKE ?]のような検索条件式を生成すること
1 | SQLStringBuilder.buildSelectionLikeOr(String[] fields) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | selectionAnd = SQLStringBuilder.buildSelectionLike(getSearchColumn()); selectionOr = SQLStringBuilder.buildSelectionLikeOr(getSearchColumn()); /** * 検索コラムを取得する(例えば:FIELD_ITEMCODE) * * @return 検索コラムを戻る */ private String getSearchColumn() { switch (mMode) { case CODE: return mColumnCode; case NAME: return mColumnName; default: break; } return ""; } |
1 2 3 4 5 | private static final String LIKE= "LIKE ? "; private static final String AND= "AND"; private static final String OR = "OR"; String selectionAnd = mColumnCode + LIKE+ AND + mColumnName+ LIKE; String selectionOr = mColumnCode + LIKE+ OR + mColumnName+ LIKE; |
|
完備していてSQL查询語句、キーワードを入力すれば distinct:trueは唯一を意味している、でないとfalse;tables:查询のテーブル;columns:检索の文字フィールド;where:查询の条件;groupBy:分類条件;having:特性;orderBy:ソート;limit:限制rows数
1 2 3 | SQLStringBuilder.buildQueryString(boolean distinct, String tables, String[] columns, String where, String groupBy,String having, String orderBy, String limit) SQLStringBuilder.buildQueryString(String table, String[] columns, String where, String orderBy) |
1 2 3 | String[] columns = new String[] { RawItem.FIELD_ITEMCODE,RawItem.FIELD_ITEMNAME, RawItem.FIELD_ITEMNAME2,RawItem.FIELD_UNITPRICE }; String where = SQLStringBuilder.buildSelection(RawItem.FIELD_ITEMDEPTCODE); String sql = SQLStringBuilder.buildQueryString(RawItem.TABLE_NAME,columns, where, RawItem.FIELD_ITEMCODE); |
1 | SELECT RawItem.FIELD_ITEMCODE,RawItem.FIELD_ITEMNAME, RawItem.FIELD_ITEMNAME2,RawItem.FIELD_UNITPRICE FROM RawItem.TABLE_NAME WHERE RawItem.FIELD_ITEMCODE = RawItem.FIELD_ITEMDEPTCODE ORDER BY RawItem.FIELD_ITEMCODE |