Java的PreparedStatement如何工作?

Epi*_*aph 5 java jdbc prepared-statement

我打算用PreparedStatement对象替换重复执行的Statement 对象以提高性能.我正在使用像MySQL函数now()和字符串变量这样的参数.

PreparedStatement我见过的大多数查询都包含常量值(比如10和字符串"New York")作为?查询中使用的参数.我如何使用函数now()和变量作为参数?是否有必要?在查询中使用s而不是实际值?我很困惑.

Mar*_*ing 11

如果你有一个来自用户输入的变量,你必须使用?而不是连接字符串.用户可能会恶意输入字符串,如果将字符串直接放入SQL,它可以运行您不想要的命令.

我意识到这个被过度使用,但它完美地说:

小鲍比表

  • 我相信,你的意思是SQL注入. (2认同)

Mar*_*ark 9

如果你有变量使用'?'

int temp = 75;
PreparedStatement pstmt = con.prepareStatement(
    "UPDATE test SET num = ?, due = now() ");
pstmt.setInt(1, temp); 
pstmt.executeUpdate():
Run Code Online (Sandbox Code Playgroud)

生成一个sql语句,如下所示:

UPDATE test SET num = 75, due = now();
Run Code Online (Sandbox Code Playgroud)