No.1
- 回答日時:
JavaでSQL文を実行するときに使われています。
例えば、
SELECT test01 FROM test WHERE test01 = 100;
をJavaで実行しようとするとき、""で囲んで文字列のデータとして
Statement クラス
のメソッドに渡します。渡された時点では単なる文字列ですから
SQLとして実行されるまでには、SQL文としてコンパイルされる必要があります。
特にこれが何回もループの中で繰り返されるようなことがあれば、
同じ回数コンパイルも繰り返されることになり大変な無駄となります。
そこで
PreparedStatement クラス
を準備して、このクラスに渡せば最初の1回のコンパイルで済むようにしています。
さて、? ですが、更にこの機能を高めるために実際の値は渡す時点でセットできるようにしています。つまり、
SELECT test01 FROM test WHERE test01 = ?
を前もってコンパイルしておき、実行する直前に例えば、
?に 100をセット
すると言う具合です。
? のことをプレースホルダとも言い、1つのSQL文に何箇所でも使えます。
実際の例が多くのページで紹介されていますので、
PreparedStatement
等で検索して、是非実行してみてください。
No.2ベストアンサー
- 回答日時:
select文の検索条件を変数で与えたい場合、
select * from t1 where c1=変数名
といった書き方をしますよね?
それでは、select文を文字列で組み立て、動的実行をすることを考えましょう。
'select + from t1 where c1=' と値を部分を文字結合し、prepareしexecuteで実行する場合、値を定数で指定すると、値が変わるたびにprepareをやり直さなくてはなりません。
これを、値部分だけが違う場合は、1回だけprepareし、execute文で値を変えながら繰り返し実行する方法があり、この場合、値を入れる部分に「?」を入れておきます。
これは、クエスチョン・パラメタと呼ばれ、標準SQLでも規定されていると思います。
SQL文の文字列は、
select * from t1 where c1=?
としておき、prepareし、実行時はexecute文で値を入れます。
select * from t1 where c1=? and c2=?
などのように、複数を可変にすることも可能です。
No.3
- 回答日時:
#2です。
追記します。?パラメタはwhere句だけでなく、SQL中に変数が書ける場所で基本的には指定できます。
例えば、
update t1
set c2=?
where c1=?
などです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 日本の全市区町村を人口密度が低 1 2023/06/18 19:51
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- サーバー Windowsサーバでグループを検索したい 1 2023/04/17 15:30
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Mac OS PATHを使ってcdなどで簡単に移動できるようになりたい 3 2023/05/13 14:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクションクエリが実行できない
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
インデックスの断片化が解消さ...
-
指定時刻のクエリ自動実行
-
phpmyadminでの表示速度が遅い
-
Excel-VBAの「しばらくお待ちく...
-
ユーザー定義関数内でのsp_exec...
-
ストアドの速度がクエリの30...
-
オラクルインストールユーザ以...
-
ストアドプロシージャでcsvファ...
-
SQLServerを立ち上げていないの...
-
同じSQL文で速度がだいぶ違う
-
SQLCMDにて教えていただきたい...
-
更新クエリが実行できない
-
下記の問合せを行うクエリを、P...
-
サーバーと実行端末が違う場合...
-
Excelフィルタ抽出で「検索して...
-
Oracle 8i コンマ(,)を含むデ...
-
ノートンの解約(「ライセンス...
-
既定のインスタンスと名前付き...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
AccessのDAO.ExecuteとDoCmd.Ru...
-
ユーザー定義関数内でのsp_exec...
-
「最高気温が35度以上の日を猛...
-
Excel-VBAの「しばらくお待ちく...
-
ストアドの速度がクエリの30...
-
サーバーと実行端末が違う場合...
-
sqlcmdでクエリの実行結果をバ...
-
Excelフィルタ抽出で「検索して...
-
【Oracle】ADOでSELECT * FROM ...
-
ストアドプロシージャでcsvファ...
-
同じSQL文で速度がだいぶ違う
-
SQLServerのジョブからバッチを...
-
SQLサーバーのジョブでのexeフ...
-
指定時刻のクエリ自動実行
-
バッチからSQLCMDを実行する方法
-
SQL-Loaderが動かないです。
-
UPDATE時のSETの実行順について
-
バッチからメンテナンスプラン...
-
SQLCMDにて教えていただきたい...
-
アクションクエリが実行できない
おすすめ情報