【问题标题】:Input username from user and use it to delete a row in mysql using java(JDBC)从用户输入用户名并使用它使用java(JDBC)删除mysql中的一行
【发布时间】:2020-07-01 19:05:41
【问题描述】:
System.out.println("Enter name of site or app");
app_name= sc.nextLine();
System.out.println("Enter username of account to remove");
user_name= sc.nextLine();
pstmt = conn.prepareStatement("delete from "+app_name+" where USERNAME='haridinesh00'");
pstmt.executeUpdate();

这里我想用 user_name 代替 haridinesh00。但由于 user_name 是 String 类型,因此该值用双引号括起来。 Sql 只允许单引号。

【问题讨论】:

  • “但是由于 user_name 是 String 类型,所以值是用双引号括起来的。” 这没有意义,Java 字符串不是这样工作的。 源代码中的字符串用双引号括起来,实际的字符串没有用双引号括起来。但是,您应该改用准备好的语句。

标签: java mysql sql jdbc prepared-statement


【解决方案1】:

按如下方式进行:

String sql = "DELETE FROM "+app_name+" WHERE USERNAME = ?";
PreparedStatement pstmt = conn.prepareStatement(sql)) 
pstmt.setString(1, user_name);
pstmt.executeUpdate();

请注意,通过这种方式,您不必将字符串括在单引号内;数据库驱动程序将为您处理。

查看this 以了解有关PreparedStatement 的更多信息。

但是,如果您仍然想按照自己的方式进行操作,请执行以下操作:

conn.prepareStatement("DELETE FROM "+app_name+" WHERE USERNAME = '" + user_name + "'");

甚至更好如下:

conn.prepareStatement("DELETE FROM "+app_name+" WHERE USERNAME = " + pstmt.enquoteLiteral(user_name));

【讨论】:

  • conn.prepareStatement("DELETE FROM "+app_name+" WHERE USERNAME = '" + user_name + "'");这行得通,谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-08-19
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多