java中安全性准备语句

时间:2016-02-03 14:56:09

标签: java sql-server prepared-statement sql-injection

我读到了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.setIntpreparedStatement.setBoolean函数,这让我感到困惑,因为我知道SQL查询作为String发送到服务器。

它不能与其他类型一起使用吗?或者它不太安全?

编辑:我看到一些人提议在PreparedStatement setString(...) for all, even if corrsponding data type is an integer

中使用setObject()

但是如果我们将SQL查询作为字符串发送,为什么我们还需要指定类型呢?它是否在查询中添加特殊类型参数?

0 个答案:

没有答案