如何在不连接的情况下构建参数化查询?

时间:2014-03-14 22:03:23

标签: talend

我看过一些关于SQL查询构建的talend open studio教程和文档。在其中,建议是使用如下的连接来构建查询:

"Select id, name, phone from customers where id=" + (String)globalMap.get("_tcomponent_var")

参数化查询。我真的不喜欢这种构建查询的方式。我想知道当你在查询字符串中放入特殊变量然后将这些变量的值作为参数添加时,是否有办法在talend组件(如ADO.NET或JDBC)中对查询进行参数化。

如何使用talend实现这一目标?

我害怕安全问题(sql注入),我相信通过连接构建字符串是一种不好的做法。

3 个答案:

答案 0 :(得分:2)

您希望使用prepared statements并使用?占位符进行位置参数。如果您使用JPA,您也可以使用:foo之类的命名参数(类似于其他语言' SQL实现)。

例如,假设您有一个名为java.sql.Connection的{​​{1}}对象。然后创建一个准备好的语句,如:

conn

答案 1 :(得分:2)

好的,我自己找到了答案。有一些名为txxxRow(tMysqlRow,tMSSqlRow等)的组件具有高级配置,您可以在其中设置preparedStatement。

令人遗憾的是,sqlxxxInput组件没有此选项。

答案 2 :(得分:1)

您需要阅读有关参数化查询的PreparedStatement

例如:

PreparedStatement ps = con.prepareStatement("Select id, name, phone from customers where id = ?");
ps.setInt(globalMap.get("_tcomponent_var"));

详细了解java中的PreparedStatement