PHP を使用して JDBC SQL ステートメントを ODBC/DB2 に変換中です。私を混乱させる次の節に出くわしました。
WHERE phid = ??id
私の最初の本能は、それが準備されたステートメントのためだったということでしたが、今ではよくわかりません。これは JSP/JDBC のことですか? Google/stack は何も表示していません。
うわあ!たぶん、それは単なる通常のバインド変数ですが、2 つ連続しています! java.sql.Conneciton (クイック リード)のドキュメントには、スペースで区切る必要があるとは書かれていません。setString
バインド変数を追加する呼び出しがあるかどうかを確認できるように、さらにコードを投稿してください。
たとえば、次のようなものです。
pstmt = conn.prepareStatement("select blah from blah WHERE phid = ??id and blah blah");
pstmt.setString(1, "customer_");
pstmt.setString(2, "order_");
このようなものは見たことがありませんが、おそらくこれが彼らがしていたことでしょうか?
編集:試してみました!そして、それは私にエラーを与えました!デッドコードを見つけたのだろうか?これは私が試したものです:
sql.append("SELECT A.ID, A.GROUP_NUMBER, A.GROUP_NAME ");
sql.append("FROM " + tab1 + " A ");
sql.append("INNER JOIN " + tab2 + " B ");
sql.append("ON (A.ID = B.GROUP_ID) ");
sql.append("WHERE B.THREAD_ID = ? ");
sql.append("AND B.THREAD_ID = ??ID ");
sql.append("ORDER BY A.ID ");
// ...
conn = getConn();
pstmt = conn.prepareStatement(sql.toString());
pstmt.setInt(1, threadId);
pstmt.setString(2, "B.");
pstmt.setString(3, "THREAD_");
このエラーが発生しました:
ILLEGAL SYMBOL "?". SOME SYMBOLS THAT MIGHT BE LEGAL ARE: MICROSECONDS MICROSECOND SECONDS SECOND MINUTES MINUTE HOURS. SQLCODE=-104, SQLSTATE=42601, DRIVER=3.57.82
他の人がコメントしているように (申し訳ありませんが、まだコメントするのに十分な担当者がいません)、これはおそらく名前付きパラメーター処理の何らかの方法です。私が知っているJDBCフレームワークでもORMフレームワークでもそれへの参照が見つからないため、その特定のアプリケーション用に作成されたカスタムJDBC / ORMフレームワークである可能性があります。いくつかのサンプル コードを参照すると、確かに役立つでしょう。