SQLSyntaxErrorException:列 'TEST' 不在 FROM 列表中的任何表中或出现在连接规范中

Posted

技术标签:

【中文标题】SQLSyntaxErrorException:列 \'TEST\' 不在 FROM 列表中的任何表中或出现在连接规范中【英文标题】:SQLSyntaxErrorException: Column 'TEST' is either not in any table in the FROM list or appears within a join specificationSQLSyntaxErrorException:列 'TEST' 不在 FROM 列表中的任何表中或出现在连接规范中 【发布时间】:2017-09-26 09:20:28 【问题描述】:

我正在尝试将一些值插入到我的表中,该表是通过执行此查询而创建的

public static final String tableName = "ACCOUNT_TABLE"; 

statement.executeUpdate("CREATE TABLE "+ tableName +" (" +
   " ID INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY ("+
   " START WITH 1, INCREMENT BY 1), username VARCHAR(15), password VARCHAR(100)" + ")");

在成功创建表之后,我正在调用注册方法将用户插入到表中

public boolean registerAccount(final User user)
    if (statement != null)
        final String userName = user.getUserName();
        final String password = user.getPassword();
        try 
            return statement.execute("INSERT INTO "+tableName +" VALUES (" + userName +"," + password +")");
         catch (SQLException e) 
            e.printStackTrace();
        
    
    return false;

在此示例中,用户名 == "TEST" 和密码 == "123"

这里 return statement.execute("INSERT INTO "+tableName+" VALUES (" + userName +"," + password +")"); 抛出异常

java.sql.SQLSyntaxErrorException: Column 'TEST' is either not in any table in the FROM list or appears within a join specification and is outside the scope of the join specification or appears in a HAVING clause and is not in the GROUP BY list. If this is a CREATE or ALTER TABLE  statement then 'TEST' is not a column in the target table.
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)

【问题讨论】:

您错过了值周围的单引号。但是最好了解prepared Statements,以防止SQL注入和这些错误 改用这个statement.execute("INSERT INTO "+tableName +" VALUES ('" + userName +"','" + password +"')"); 使用PreparedStatement不要将值连接到 SQL 字符串中。它不仅可以防止 SQL 注入,还可以解决您现在遇到的问题。 感谢工作,现在我收到此错误 java.sql.SQLSyntaxErrorException: The number of values assigned is not the number of specified or implicit columns. 为什么会出现这个错误?表有 3 列,其中之一是自动添加 【参考方案1】:
    字符串应该在两个'username' 之间,所以您的查询应该像这样statement.execute("INSERT INTO "+tableName +" VALUES ('" + userName +"','" + password +"')");

    但这并不安全,为避免任何语法错误或 SQL 注入,您必须改用 PreparedStatement。

    关于这个错误java.sql.SQLSyntaxErrorException 发生这种情况是因为您没有指定要在查询中插入哪些列,所以它应该如下所示:

INSERT INTO tableName(username_col, password_col) VALUES ('userName', 'password') //------------^-------------^---------- ------------^------------^

【讨论】:

以上是关于SQLSyntaxErrorException:列 'TEST' 不在 FROM 列表中的任何表中或出现在连接规范中的主要内容,如果未能解决你的问题,请参考以下文章

SQLSyntaxErrorException:列 'TEST' 不在 FROM 列表中的任何表中或出现在连接规范中

如何修复“java.sql.SQLSyntaxErrorException:'字段列表'中的未知列'product0_.return_policy'”异常?

java.sql.SQLSyntaxErrorException:意外令牌:([关闭]

如何解决 hsqldb 中的 SQLSyntaxErrorException?

Bug解决 java.sql.SQLSyntaxErrorException 异常

SQLSyntaxErrorException: ORA-00979: 不是 GROUP BY 表达式