Java的PreparedStatement是如何工作的?
我计划用 PreparedStatement
对象替换重复执行的 Statement 对象以提高性能。 我使用 MySQL 函数 now()
等参数和字符串变量。
我见过的大多数 PreparedStatement
查询都包含常量值(例如 10
和 "New York"
等字符串)作为用于 < code>? 在查询中。 我将如何使用像 now()
这样的函数和变量作为参数? 是否有必要在查询中使用 ?
而不是实际值? 我很困惑。
I am planning to replace repeatedly executed Statement objects with PreparedStatement
objects to improve performance. I am using arguments like the MySQL function now()
, and string variables.
Most of the PreparedStatement
queries I have seen contained constant values (like 10
, and strings like "New York"
) as arguments used for the ?
in the queries. How would I go about using functions like now()
, and variables as arguments? Is it necessary to use the ?
s in the queries instead of actual values? I am quite confounded.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
如果您有一个来自用户输入的变量,则必须使用 ? 而不是连接字符串。 用户可能会恶意输入字符串,如果您将字符串直接放入 SQL 中,它可能会运行您不希望的命令。
我意识到这个被过度使用了,但它说得很完美:
If you have a variable that comes from user input, it's essential that you use the ? rather than concatenating the strings. Users might enter a string maliciously, and if you drop the string straight into SQL it can run a command you didn't intend.
I realise this one is overused, but it says it perfectly:
如果有变量,请使用“?”
生成如下所示的 sql 语句:
If you have variables use the '?'
Produces an sql statment that looks like:
您不必在PreparedStatement 中使用占位符。 像这样的东西:
会工作得很好。 但是,您不能使用占位符,然后将函数调用绑定到它。 像这样的东西不能用来调用 sysdate 函数:
You don't have to use placeholders in a PreparedStatement. Something like:
would work just fine. However, you can't use a placeholder and then bind a function call to it. Something like this can't be used to call the sysdate function:
如果您要调用 SQL Server 的内置函数,请使用 准备声明。
如果您要调用已加载到 SQL Server 上的存储过程,请使用 CallableStatement。
使用问号作为您传递的函数/过程参数和您接收的函数返回值的占位符。
If you are calling built in functions of your SQL server then use PreparedStatement.
If you are calling stored procedures that have been loaded onto your SQL server then use CallableStatement.
Use question marks as placeholders for function/procedure parameters that you are passing and function return values you are receiving.
我开发了一个函数,允许您在 SQL 查询中使用命名参数:
您可以这样使用它:
I've developed a function that allows you to use named parameters in your SQL queries:
You can use it this way: