我读到了SQL注入以及使用preparedStatement
来阻止它们的方法。
所以我创建了一个通用原型SQL类,它将获取查询和参数。
然后它将查询和参数合并在一起并运行它。
public List select(String query, String [] prepString) throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
//statement = connect.createStatement();
preparedStatement = connect.prepareStatement(query);
for(int i = 0; i < prepString.length ; i++){
preparedStatement.setString(i+1, prepString[i]);
}
resultSet = preparedStatement.executeQuery();
return resultSetToArrayList(resultSet);
我可以使用setString
作为一切吗?
因为我还看到了preparedStatement.setInt
和preparedStatement.setBoolean
函数,这让我感到困惑,因为我知道SQL查询作为String发送到服务器。
它不能与其他类型一起使用吗?或者它不太安全?
编辑:我看到一些人提议在PreparedStatement setString(...) for all, even if corrsponding data type is an integer
中使用setObject()
但是如果我们将SQL查询作为字符串发送,为什么我们还需要指定类型呢?它是否在查询中添加特殊类型参数?