标签: parameterized

参数化SQL语句与非常简单的方法

当我开始在我的程序中编写第一个SQL语句时,我觉得很舒服,用同事给我看的一个非常简单的方法来保护自己免受SQL注入.它用两个单引号替换了所有单引号.

例如,有一个搜索字段,您可以在其中输入客户名以在可自定义项中进行搜索.如果你愿意进入

彼得的理发店

SELECT语句看起来像

SELECT *
FROM Customers
WHERE Customername = 'Peter''s Barbershop'
Run Code Online (Sandbox Code Playgroud)

如果现在攻击者会插入此:

';DROP TABLE FOO; --
Run Code Online (Sandbox Code Playgroud)

声明如下:

SELECT *
FROM Customers
WHERE Customername = ''';DROP TABLE FOO;--'
Run Code Online (Sandbox Code Playgroud)

它不会丢弃任何表格,而是搜索客户名称的客户名称; DROP TABLE FOO; - 我想,这将不会被发现;-)

现在经过一段时间编写语句并使用此方法保护自己免受SQL注入后,我读到许多开发人员使用参数化语句,但我从未读过使用"我们的"方法的文章.所以绝对有充分的理由.

参数化语句会覆盖哪些场景,但我们的方法却没有?与我们的方法相比,参数化语句有哪些优点?

谢谢
Philipp

sql sql-injection parameterized

7
推荐指数
1
解决办法
923
查看次数

获得通用类

我的班级开始

public abstract class LastActionHero<H extends Hero>(){
Run Code Online (Sandbox Code Playgroud)

现在我想写的代码中的某个地方,H.class但这是不可能的(喜欢String.class或是Integer.class).

你能告诉我如何获得Class通用的吗?

java generics types class parameterized

7
推荐指数
2
解决办法
1万
查看次数

参数化方法运行两次

我正在运行这段代码,并意识到该getAllParameters()方法由于某种原因运行了两次。由于静态字段enumMap是在该方法之外初始化的,因此它会被填充两次,这会导致重复元素并使我正在运行的测试失败。

我认为enumMap在方法内部初始化可以解决问题,因为当该方法第二次运行时地图确实会重置。

尽管这解决了问题,但我想知道为什么在运行 Maven Test 时会发生这种情况?我尝试了参数的数量,认为这可能会影响方法运行的次数,但它似乎只运行了两次。

@RunWith(Parameterized.class)
public class MyTest {

    private static Map<String, List<Class<? extends LocalizedJsonEnum>>> enumMap = new HashMap<>();

    @Parameter
    @SuppressWarnings({"WeakerAccess", "unused"})
    public Class<? extends LocalizedJsonEnum> currentEnum;
    @Parameter(value = 1)
    @SuppressWarnings({"WeakerAccess", "unused"})
    public  String currentClassName;

    /**
     * Generate a list of all the errors to run our test against.
     *
     * @return the list
     */
    @Parameters(name = "{1}.class")
    public static Collection<Object[]> getAllParameters() throws Exception {
        Collection<Object[]> parameters = new LinkedList<>();
        Reflections reflections …
Run Code Online (Sandbox Code Playgroud)

java junit unit-testing parameterized maven

7
推荐指数
1
解决办法
857
查看次数

JUnit 5 中的 beforeEach/beforeAll 参数化

我想为一个类似数据库的小型应用程序编写一个测试。此应用程序使用查询,查询应返回正确的结果。这在 JUnit 5 中很容易实现,比如

@BeforeEach
void before() {
  database = prepareDatabase();
}

@Test
void testQuery1() {
  assertThat(database.query("query1")).isEqualTo("result1");
}

@Test
void testQuery2() {
  assertThat(database.query("query2")).isEqualTo("result2");
}

....
Run Code Online (Sandbox Code Playgroud)

现在我想添加优化开关(例如查询优化器或数据库索引)。无论运行优化开关如何,查询都应该返回相同的结果(优化应该只改变效率而不是结果)。

对于测试,这意味着我想为其他一些实现prepareDatabase()(例如,一个带有优化器,一个带有索引,一个什么都没有)运行相同的方法。

我还没有找到合适的扩展名。我想为每个优化设置复制整个类或提供来自共享父类的方法。然而,这感觉不像 JUnit 5 完成这项任务的方式。也许有人可以给我指出一个可以帮助我解决这个问题的功能?

java parameterized junit5

7
推荐指数
1
解决办法
2672
查看次数

SQL Server查询计划的差异

当从参数化查询更改为非参数化查询时,我无法理解SQL Server中我的语句的估计查询计划的行为.

我有以下查询:

DECLARE @p0 UniqueIdentifier = '1fc66e37-6eaf-4032-b374-e7b60fbd25ea'
SELECT [t5].[value2] AS [Date], [t5].[value] AS [New]
FROM (
    SELECT COUNT(*) AS [value], [t4].[value] AS [value2]
    FROM (
        SELECT CONVERT(DATE, [t3].[ServerTime]) AS [value]
        FROM (
            SELECT [t0].[CookieID]
            FROM [dbo].[Usage] AS [t0]
            WHERE ([t0].[CookieID] IS NOT NULL) AND ([t0].[ProductID] = @p0)
            GROUP BY [t0].[CookieID]
            ) AS [t1]
        OUTER APPLY (
            SELECT TOP (1) [t2].[ServerTime]
            FROM [dbo].[Usage] AS [t2]
            WHERE ((([t1].[CookieID] IS NULL) AND ([t2].[CookieID] IS NULL)) 
            OR (([t1].[CookieID] IS NOT NULL) AND ([t2].[CookieID] …
Run Code Online (Sandbox Code Playgroud)

sql-server parameterized sql-execution-plan

6
推荐指数
1
解决办法
837
查看次数

参数化类和元类之间有什么区别(请用Python中的代码示例)?

Hello Stack Overflow的贡献者,

我现在是一名学习Python的新手程序员,我来到这个网站,它有助于解释面向对象的范例.我知道元类是类的类(比如元目录是目录的目录等等),但我遇到了一些问题:元类和参数化类之间的实际区别是什么,根据网站的定义?

如果可以,请在Python中包含代码示例,以说明两者之间的差异.谢谢您的帮助!

python metaclass class parameterized

6
推荐指数
1
解决办法
3193
查看次数

Erlang中的参数化模块

我正在浏览mochiweb源代码并且看到了以前从未使用过的东西.该模块声明尤其是在mochiweb_requestmochiweb_response模块在了Mochiweb HTTP库中找到.以下是模块的开始:

-module(mochiweb_request,[Socket, Method, RawPath, Version, Headers]).
-author(...).

然后在模块中你看到get(socket) -> Socket;get(method)-> Method; ....
这让我很困惑.当我尝试获取其中一个这样的模块的模块信息时,编译器添加了一些东西:{abstract,true}在返回:
mochiweb_request:module_info()..事实上,他们的文档将这些模块称为abstract modules.

我搜索了谷歌并找到了一篇关于参数化模块的论文:链接太大了但是你肯定如果你在这里继续那么你会得到论文

这些模块不能直接调用,而是通过它们的实例调用.它使模块表现得像是乐趣.我已经意识到它是运行时系统中的一个非官方特性.令我困惑的是,mochiweb的家伙们正在使用它!在mochiweb模块中,您将找到自己的写作:

loop(Req,_DocRoot)->
    "/" ++ Path = Req:get_path(),
    Body = Req:recv_body(),
    Method = Req:get(method),
    ...,
    ....,
    Response = Req:ok({"text.html;charset=utf-8",[],chunked}),
    Response:write_chunk("Some text here....."),
    ...

试图 io:format("\n\t Req = ~p~n",[Req])揭示一个复杂的数据结构(一个元组)element(1,Req) == mochiweb_request.挺有趣的!?!!!?

问题1是:现在在生产中使用是否稳定,或者我可以等到正式生产?

问题2是:如果mochiweb家伙尚未正式使用它,他们是如何获得使用它的信心的?

问题3:为什么它还没有正式发布?(因为,对我来说,它带来了一些面向对象的功能)

问题4:那里有没有人使用过它?他/她在哪些情况下使用这些参数化模块?为什么?你能指点我们看看或发布一些源代码的链接,以便我们可以找到更多有关此功能的信息吗?

最后一个问题:没有在Erlang Docs中我发现了这个功能.没有教科书,甚至没有回家.那么使用它的人是如何找到使用它的方式和原因的呢?它是否已经包含在此处的Erlang Run时间系统的商业版本中?

erlang module parameterized

6
推荐指数
1
解决办法
2226
查看次数

嵌入式SQL与动态SQL

我目前正在做一个*咳嗽*Oracle*咳嗽*数据库主题.讲师将介绍嵌入式SQL作为您使用其他语言(例如C,C++)与(Oracle)数据库交互的方式.

我自己做了一些数据库工作(在mysql上)我使用动态sql.

由于嵌入式SQL似乎仅限于几个Oracle和其他几个,所以这更像是锁定的尝试,还是嵌入式SQL中的真正价值?

编辑:我刚刚意识到,在PL/SQL课程结束后,本课程是正确的.

原始问题询问参数化SQL(现在用"动态sql"代替以改进问题).

旁白:我认为我买的约30美元的"SQL和关系理论"一书教我的不仅仅是这个数据库类.

sql oracle parameterized

6
推荐指数
1
解决办法
3173
查看次数

Fortran:'select type'子句中的参数化派生类型

我试图使用无限多态指针在子例程中使用参数化派生类型.

可以对参数化类型使用'select type'子句吗?

我已尝试过以下几行,但收到​​编译错误.(TYPE或附近的语法错误)

module mod_real
  implicit none

  type :: type1(k)
    integer, kind :: k = 4
    real(kind=k) :: val
  end type type1

  contains

    subroutine out(in)
      class(*) :: in
      select type(in)
        type is (type1(4))
          print *, 'real(4):', in%val
        type is (type1(8))
          print *, 'real(8):', in%val
      end select
    end subroutine out

end module mod_real 

program real_test
  use mod_real

  type(type1(4)) :: p
  type(type1(8)) :: p2 

  p%val = 3.14
  p2%val = 3.1456d0

  call out(p)
  call out(p2)       

end program real_test 
Run Code Online (Sandbox Code Playgroud)

具有"type is(type1(4))"和"type is(type1(8))"的行被指示为具有不正确的语法.我使用的是Portland Group …

polymorphism fortran types parameterized

6
推荐指数
1
解决办法
680
查看次数

JUnit 5 和 Arguments.of() 以及函数

编写 JUnit 5 参数化测试,需要使用 Arguments.of() 将函数传递给测试,但有 2 个编译错误我不知道如何修复。任何帮助,将不胜感激。

  1. Arguments 类型中的(Object...) 方法不适用于参数 (boolean, String::length)
  2. 该表达式的目标类型必须是函数接口

public static Stream<Arguments> some() {
    return Stream.of(Arguments.of(true, String::length));
}

@ParameterizedTest
@MethodSource
public <T> void some(final T input, final Function<String, Integer> length) {
}
Run Code Online (Sandbox Code Playgroud)

以下按预期工作。

public void sample() {
    some(true, String::length);
}
Run Code Online (Sandbox Code Playgroud)

parameterized junit5

6
推荐指数
1
解决办法
4960
查看次数