【问题标题】:passing dynamic values to query in java for binarystream传递动态值以在java中查询二进制流
【发布时间】:2013-08-20 09:30:57
【问题描述】:

我正在尝试将值动态传递给 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 ..这个值我无法像上面那样动态传递 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。

谁能告诉我我该怎么做?

谢谢。

【问题讨论】:

  • but I want to avoid this manual setting of the values 为什么?如果您正在解析用户输入,则绝对应该使用准备好的语句。如果您不确定为什么,也许可以阅读 SQL 注入。

标签: java sql dynamic bytearray


【解决方案1】:

实际上是第二个例子,创建一个带参数的预处理语句是最好的方法。它可以保护您免受 SQL 注入。你应该保持这种状态。

【讨论】:

  • 谢谢大家。但是我已经编写了一个在 DB 中插入的通用方法。我想通过构建动态查询将值传递给这个通用方法。但在 bytearray[] 的情况下,我无法做到。任何建议..
  • 真的,你不应该。它会在您的应用程序中造成很大的漏洞。如果您不明白为什么,也许可以阅读一些关于 SQL 注入的内容。顺便说一句,您正在动态构建查询...?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 2019-07-15
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
相关资源
最近更新 更多