0

以下のように動的に値を PreparedStatement に渡し、DB にレコードを挿入しようとしていますが、以下のように実行できます。

String fName="AA"; // this value changes
String lName="BB"  //this value changes 
String query="insert into person(first_name,last_name) values ('"+fName+"','"+lName+"')"
PreparedStatement ps= null;
ps== connection.prepareStatement(query); 
ps.executeUpdate();

しかし、私は ByteArrayInputStream に変換した byteArray[] を持っています..この値は、blob である 3 番目の列の写真の fName や lName のように、上記のように動的に渡すことができません。

しかし、私が好きなら、

byte[] b =somebytesss...
ByteArrayInputStream bin=new ByteArrayInputStream(b);
String query="insert into person(first_name,last_name,photo) values (?,?,?)"
PreparedStatement ps= null;
ps.setString(1,"AA");
ps.setString(2,"BB");
ps.setBinaryStream(3,bin,bin.available());
ps== connection.prepareStatement(query); 
ps.executeUpdate();   

これも機能しています。

しかし、この値の手動設定は避けたいと思います。最初のケースのような動的クエリを、bytearray[] の preparestatement にも渡したいだけです。

誰でも私にこれを行う方法を教えてもらえますか?

ありがとう。

4

1 に答える 1

0

Actually the second example, creating a prepared statement with parameters is the preferred way to do that. It secures you against SQL injection. You should keep it that way.

于 2013-08-18T13:07:58.050 に答える