Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中为binarystream向查询传递动态值_Java_Sql_Dynamic_Bytearray - Fatal编程技术网

在java中为binarystream向查询传递动态值

在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

我正在尝试动态地将值传递给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();
但是我有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注入的内容。顺便说一下,您正在动态地构建查询。。。?