【发布时间】:2018-11-23 15:23:02
【问题描述】:
我正在尝试从板上获取 COUNT(*),
但我想知道以下代码的性能会更好:
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery("SELECT COUNT(*) FROM board_*** WHERE article_category = " + foo);
或
PreparedStatement pstmt = connection.prepareStatement("SELECT COUNT(*) FROM board_*** WHERE article_category = ?");
pstmt.setInt(1 , foo);
ResultSet rs = pstmt.executeQuery();
很难决定..
【问题讨论】:
-
绝对是第二个,因为您没有直接在查询中插入可能是恶意的数据。但这更多地与安全有关。
-
没那么难,考虑到性能和安全隐患,PreparedStatement 更好
-
如果您必须在这两个选项之间进行选择,那么将第一个选项认为 更好 的情况很少,甚至可能没有。拿2号!
-
如果你只执行一次,它们将花费相同的时间,但第二次更安全。如果您使用不同的参数多次执行此操作,则第二次将更安全、更快。选择真的不难。一旦有了动态参数,就使用准备好的语句。就这么简单。如果你想让这个速度更快,你应该担心的是:我是否在 article_category 上定义了一个索引?
-
谢谢!但是如果 'foo' 是整数呢?它仍然会影响安全含义和性能吗?