【问题标题】:SQL select column with conditions JAVA带有条件JAVA的SQL选择列
【发布时间】:2021-06-17 19:15:23
【问题描述】:

我试图获取数据库中名称列包含“jansen”的特定值,但是当我运行我的代码时,它会显示这样的错误

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'jansen' in 'where clause'

这是我的代码

try {
     Statement stmt=MyConnection.getConnection().createStatement();
     ResultSet rs=stmt.executeQuery("select * from emp where name = jansen");
     while(rs.next())
         System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getString(3));
     }catch (Exception e){
          System.out.println(e);
    }

[这是我在 Sqlyog 中的数据库]

【问题讨论】:

    标签: java sql select


    【解决方案1】:

    您应该在 SQL 语句中的字符串值周围加上引号。

    "select * from emp where name = 'jansen'"
    

    您稍后可能会遇到的另一个问题是,您的资源(例如连接、语句等)在您使用后没有被清理。你应该在使用后调用close() 函数。然后,您必须将该代码放入 finally 块中,并再次捕获它以防止 close 函数本身引发异常。因为它会变得凌乱和臃肿,所以有一个更好的解决方案来清理东西:

    try 的大括号之间创建您的语句,它会为您关闭它。 (称为try-with-resources 声明)

    try (Statement stmt = MyConnection.getConnection().createStatement()) {
      ResultSet rs = stmt.executeQuery(query);
      while (rs.next()) {
        ...
      }
    } catch (SQLException e) {
      System.out.println(e);
    }
    

    您可以在the official tutorial 中阅读有关在 java 中执行 SQL 语句的更多信息。

    【讨论】:

    • 我们可以选择 * from usingpreparedstatement 而不是 using statement 吗?
    • @JansenStanlie 你可以,如果值"Jansen" 是由用户提供的,你肯定应该这样做。但是,如果值 "Jansen" 不是动态的,那么在查询中对其进行硬编码没有任何问题。
    • PreparedStatement stmt=con.prepareStatement("select * from emp");结果集 rs=stmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)+" "+rs.getString(2)); } 喜欢这个先生吗?
    • 如果你想使用准备好的语句,看看下面@rortegat 的答案。他所做的看起来是正确的。此外,您可能希望使用列名来提取结果,我不太相信表列的索引。 (例如rs.getInt(1) 使您的代码不可读和不可预测)
    • @JansenStanlie 在 MySQL 中,您可以执行以下 SQL 语句:ALTER TABLE emp ADD CONSTRAINT uniqueEmp1 UNIQUE (name) 您可以在 SQLyog 中运行它。但是,您首先需要摆脱重复记录。如果事先已经违反了约束,MySQL 不会让您添加约束。
    【解决方案2】:

    您应该以这种方式使用 PreparedStatement 而不是 Statement:

    
    PreparedStatement statement = MyConnection.getConnection().prepareStatement("select * from emp where name = :empId");
    statement.setString(empId, "jansen");
    ResultSet rs = statement.executeQuery();
    
    

    然后“jansen”将被替换为具有动态名称的字符串变量。

    【讨论】:

    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 2016-02-28
    • 2013-08-03
    • 1970-01-01
    • 2017-12-09
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多