在java中为binarystream向查询传递动态值
我正在尝试动态地将值传递给PreparedStatement,并在DB中插入记录,如下所示,我能够做到这一点在java中为binarystream向查询传递动态值,java,sql,dynamic,bytearray,Java,Sql,Dynamic,Bytearray,我正在尝试动态地将值传递给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= nu
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();
但是我有byteArray[],我将其转换为ByteArrayInputStream..这个值我不能像上面那样动态传递,就像我的第三张Column照片的fName和lName一样,这是一个Blob
但如果我真的喜欢
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。
谁能告诉我怎么做
谢谢。事实上,第二个例子是,用参数创建一个准备好的语句是最好的方法。它可以防止SQL注入。你应该保持这样
但我想避免手动设置值
为什么?如果您正在解析用户输入,那么绝对应该使用准备好的语句。如果您不确定原因,可以阅读SQL注入。谢谢大家。但我已经为数据库中的insert编写了一个通用方法。我想通过构建动态查询将值传递给这个通用方法。但是如果是bytearray,我就做不到了。任何建议……真的,你不应该。这将在应用程序中造成很大的漏洞。如果您不明白为什么,可以阅读一些关于SQL注入的内容。顺便说一下,您正在动态地构建查询。。。?