StringBuilderを使って文字列連結して、それをSQL文(String型)として利用するプログラムを作りました。
※SQLはループ処理で約10万個ぐらい発行→実行します
StringBuilderの文字列を、最終的にString型の変数(strSql)に代入するのですが、
下記のどちらで代入する方がコスト掛からないでしょうか?
A案.
----------
StringBuilder sb = new StringBuilder();
sb.append(変数a);
sb.append(変数b);
sb.append(変数c);
String sqlStr = new String(sb);
----------
B案.
----------
StringBuilder sb = new StringBuilder();
sb.append(変数a);
sb.append(変数b);
sb.append(変数c);
String sqlStr = sb.toString();
----------
教えてください。
No.1ベストアンサー
- 回答日時:
↓だって。
速さならtoString()の方がいいみたいよ。String
public String(StringBuilder builder)
文字列ビルダー引数に現在含まれている文字列を持つ新しい文字列を割り当てます。文字列ビルダーの内容がコピーされます。 コピー後に文字列ビルダーが変更されても、新しく作成された文字列には影響しません。
このコンストラクタを使用すると、StringBuilder に移行しやすくなります。toString メソッドを使って文字列ビルダーから文字列を取得するのは、処理が高速になるので一般的に推奨されています。
パラメータ:
builder - StringBuilder
導入されたバージョン:
1.5
No.3
- 回答日時:
たった10万回しかまわさないのであれば全く気にする必要は無いと思いますけど。
私の6年前のPCで実行したところ、どちらも0.15秒程度で有意な差はありませんでした。
それぞれ5回くらいしか試してませんけど。
No.2
- 回答日時:
ちょっと質問の意図とは離れるかもしれませんが、気になるのでひとつ。
使用しているDBはなんでしょうか?
同じようなSQLで項目が違うだけならば、パラメータを使用した方が、高速になるような気がします。
ご検討あれ。
この回答への補足
別々のシステムですが、オラクルとポスグレの二つで作ってます。
確かにパラメータの方がインジェクション対応としても優れているとは思うのですが、
テーブル名が可変(テーブル名はパラメータ化不可能)というのと、
あとはタイムスタンプ型への変換などでうまくいかなかったので今回は全部StringBuilderでやってしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- 高校 高2数Bの質問です。 ベクトル PB+DS-PS-XB=DX を証明する問題です。 →は省略させて頂 2 2022/05/15 01:03
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- スピーカー・コンポ・ステレオ 5.1chサラウンドの “センターの谷” に落ちています。 7 2022/08/07 06:42
- Excel(エクセル) エクセルで近似値を特定の行から抽出したい 3 2023/05/29 19:12
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
C言語の変数(LSB)の合わせ込...
-
BCD形式で時刻を!
-
javaのCSVデータ読込についてです
-
hiddenの値を消したくない!
-
wsprintf関数の使い方について
-
直し方について教えて頂きたい...
-
javaの演算子の部分ですが 4行...
-
ArrayListの要素数の上限
-
char型での演算子
-
PSQLExceptionが発生する
-
VB6で固定長の文字列の長さを変...
-
String str = "a\\\\b\\\\c";
-
DateTimePickerに値を入れたい...
-
-1.#IND00を検知する方法
-
CString 数値チェック
-
<JFreeChart> 縦軸の値の間隔を...
-
JSPでの計算結果表示
-
リテラルの問題
-
JSPでHashMap・配列の変数の値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
ArrayListの要素数の上限
-
DateTimePickerに値を入れたい...
-
wsprintf関数の使い方について
-
Stringクラスの変数の格納アド...
-
BCD形式で時刻を!
-
javaのCSVデータ読込についてです
-
このプログラミング誰か教えて...
-
Evaluate()に文字列の形式の数...
-
このプログラミング誰か教えて...
-
JSPでHashMap・配列の変数の値...
-
特定の文字列を複数抜き出した...
-
matchesを否定文として使う方法...
-
DOSバッチで変数の値を変数名に...
-
Javaの問題なのですが、「3文字...
-
excel vba 時間計算と条件分岐...
-
実行シェルからCOBOLへパラメー...
-
日付や時刻の"01"を" 1"に変換...
-
VB6,論理演算子Orの使い方がわ...
-
char型での演算子
おすすめ情報