以最安全的方式使用预准备语句

Jim*_*Jim 6 java sql validation jdbc prepared-statement

从安全验证的角度来看,两者之间是否存在差异:

stmt.setObject(1, theObject);

stmt.setString(1, theObject);

我知道在这种情况下theObject是一个,String但我有兴趣使这部分代码更通用,以涵盖其他情况,并想知道输入验证的安全性角度是否受到影响

SJu*_*n76 0

恕我直言

鉴于 JDBC 是数据库服务器的一个非常轻的包装器(它除了生成 SQL 供数据库直接解释之外几乎没有其他作用),我希望

stmt.setObject(1, theObject);
Run Code Online (Sandbox Code Playgroud)

完全一样

stmt.setString(1, theObject == null ? "null" : theObject.toString())`;
Run Code Online (Sandbox Code Playgroud)

当数据库处理生成的 SQL 并查找它是否适合时,将发生“类型验证”。

  • JDBC 和 ODBC 是两种不同的技术,并且 JDBC 不是 ODBC 的包装(尽管存在桥梁)。 (2认同)