状況によっては、特定の時点でDBパーティションを作成する必要があります。私は次のようなStatement
を使用しています:これは正常に動作し、私が期待するまさにん準備済みステートメントを使用してLONGデータ型を設定する
alter table table_name split partition default_partition values (' +
id + ') into ( partition " + partitionName + ", partition
default_partition) update indexes
。ただし、id
という値は、権限のない人が潜在的にアクセスできる入力から発生します。したがって、上記の文はの攻撃に対して脆弱なです。 PreparedStatement
を使用したいと思いますが、どうしたらよいかわかりません。
問題は、oracleのパーティション表がLONGのHIGH_VALUE列に "id
"の値を設定することです。これを行うための適切な設定がない(Stringは機能しないので)。私は、無駄な値としてStringReader
とByteArrayInputStream
の両方を使用して、さまざまなストリームメッセージを使用しようとしました。私はロングがもう使用されるはずではないことを知っていますが、それはオラクルが持っている方法なので、実際にはそれを回避することはできません。
ORA-14308: partition bound element must be one of: string, datetime or interval literal, number, or NULL
OracleのドキュメントをLONGを取得する方法について良い情報を持っている(LOBのようなものであるOracleデータ型、):
私はそれらのいずれかの方法で試してください、これは私が得るものですそれを設定する方法ではありません。誰も私にこれを手伝ってもらえますか?また、JDBCドライバのOracle実装についても見てきましたが、setLONG型のメソッドもないようです。私はこれを行う方法がありますか?
おそらく私は何かが不足していますが、PreparedStatementに 'setLong(int、long)'というメソッドがあると考えました。 http://docs.oracle.com/javase/6/docs/api/java /sql/PreparedStatement.html これは機能しませんか? – hooknc
はい、LONG Oracleタイプは基本的にLOBです。だから、Javaほど長くはない。 – AHungerArtist
OracleのLONGは文字データ(愚か者)なので、 'setString(int、id.toString())'を試してみましたか?どんなセットメソッドを試しましたか? – Gray