【问题标题】:Java Prepared Statements Not Entirely Working - MYSQLJava 准备好的语句不完全工作 - MYSQL
【发布时间】:2015-07-09 11:20:54
【问题描述】:

我正在使用 Java Servlet 连接数据并将数据插入到我的 MYSQL 数据库中。我目前正在使用以下准备好的语句:

String query1 = "SELECT * FROM `user` WHERE `username` = ?;";
PreparedStatement stat1 = connection.prepareStatement(query1);
stat1.setString(1, username);
ResultSet result = stat1.executeQuery();
out.println("<h1> PREPARED STATEMENT WORKING </h1>");

使用这个,h1 标题不会显示。

但是,我已经得到了这个工作:

String query1 = "SELECT * FROM `user` WHERE `username` = \"" + username + "\";";
PreparedStatement stat1 = connection.prepareStatement(query1);
ResultSet result = stat1.executeQuery();

out.println("<h1> PREPARED STATEMENT WORKING </h1>");

使用此方法,将显示 h1 标头。我的问题是,我设法让工作变得不那么安全的方式吗?如果是这样,我怎样才能让第一种方法起作用?

【问题讨论】:

  • 第一个 sn-p 会发生什么?你有例外吗?
  • 没有看到异常,不知道第一个有什么问题。第二个肯定是不安全的。不要使用它,否则有人可能会在您的网站上使用“joe”之类的用户名注册给您带来很多麻烦;drop table user'
  • 也许只是我更习惯于 Oracle 风格,但我通常不会为表名或列名使用引号,而不是分号......也许你应该试一试。
  • @Mureinik 当它运行时,它显示一个空白网页,没有异常显示。如果有任何区别,则将从 html 表单中检索变量“用户名”。

标签: java mysql servlets prepared-statement


【解决方案1】:

尝试从您的查询中删除;,并告诉我们它是否有效。

【讨论】:

  • 这就是解决方案。这是因为 executeQuery 不允许多个查询吗?
  • 这是因为 MySQL 中的 SQL 查询最终没有使用;。请也投赞成票:)
  • @hjalpmig MySQL 确实接受多个 SQL 查询,但您应该在创建连接时向连接 URL 传递一个附加参数。
  • @RoeyGolzarpoor 任何 SQL 语句最后都使用分号,但它在查询中接受多个语句时。情况并非如此,因此是 SQL 异常。
猜你喜欢
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 2015-10-11
  • 2021-08-02
相关资源
最近更新 更多