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