1

データベースに接続する Java プログラムがあり、準備されたステートメントとパラメーター化されたクエリを使用してデータベース内の何かを更新しようとしています。ここに私のコードの一部があります:

updateValSetId = con.prepareStatement("UPDATE COLUMNNAME " +
            "SET COLUMNDISPLAYNAME = ? + ' Value Set Identifier' " +
            "WHERE COLUMNDISPLAYNAME = ? + 'VALSETID' and TABLENAME = ?");

クエスチョン マーク引数に入力する最初の 2 つの値は、1-アカウント、2-ACCT で、3 番目の値は重要ではありません。私の質問は ---> 疑問符を文字列値に結合する方法はありますか? 加算記号が機能しない「ORA=01722: 無効な番号」というエラーが表示される

そのエラーの意味を調べた後、コードを次のように変更しました。

 updateValSetId = con.prepareStatement("UPDATE COLUMNNAME " +
            "SET COLUMNDISPLAYNAME = '? Value Set Identifier' " +
            "WHERE COLUMNDISPLAYNAME = '?VALSETID' and TABLENAME = ?");

それもうまくいきませんでした。もう一度、疑問符を文字列と組み合わせる方法はありますか?

ありがとう!

編集 ----------> ? の後の文字列テキストを取り出すことにしました。そしてそれを別の場所に置きます:

updateValSetId.setString(1, f.getValue() + " Value Set Identifier");
               updateValSetId.setString(2, f.getKey() + "VALSETID");
               updateValSetId.setString(3, e.getKey());
               updateValSetId.executeUpdate();

これは、準備済みステートメントの後、値を ? パラメータ。'f' と 'e' は、データが保存されているハッシュマップです。getValue と getKey から取得した値に文字列を追加しても、上記のコードが機能しないのはなぜでしょうか。エラーは発生しません。コンパイルして実行しますが、データベースに必要な値を更新しません。たとえば、ACCT は最初のキーで、Account は最初の値であるため、それらが渡されると、getter の後にある文字列に追加され、データベースは ACCTVALSETID を Account Value Set Identifier に更新する必要があります。 ? 私は何が欠けていますか?

ありがとう!

4

1 に答える 1

0

私が行った編集は実際には正しいです。コードの他の部分にエラーがありました。次のコードは機能します。

updateValSetId.setString(1, f.getValue() + " Value Set Identifier");
           updateValSetId.setString(2, f.getKey() + "VALSETID");
           updateValSetId.setString(3, e.getKey());
           updateValSetId.executeUpdate();

だから、文字列値を ? に追加できないと思います。パラメータですが、これは ? に追加した場合とまったく同じように機能します。

于 2013-06-26T12:42:55.907 に答える