com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知列';C3714552';在';其中第'条;

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:未知列';C3714552';在';其中第'条;,mysql,sql,Mysql,Sql,我不知道为什么我会收到这个错误消息…正如@Brad所指出的,您的主要问题是在`symptom`.`cui`=“+sintomas.pop()+”)中使用了混淆的引号应该是:`symptom`.`cui`='+sintomas.pop()+') 为什么会这样?根据(大多数关系数据库管理系统(包括SQL Server、Oracle、Postgres、MySQL等)所遵循的SQL语言的正式行业标准的旧版本),单引号和双引号用于不同的目的 双引号用于标识符,包括列名和表名,如“症状”。“cui” 在do

我不知道为什么我会收到这个错误消息…

正如@Brad所指出的,您的主要问题是在
`symptom`.`cui`=“+sintomas.pop()+”)中使用了混淆的引号应该是:
`symptom`.`cui`='+sintomas.pop()+')

为什么会这样?根据(大多数关系数据库管理系统(包括SQL Server、Oracle、Postgres、MySQL等)所遵循的SQL语言的正式行业标准的旧版本),单引号和双引号用于不同的目的

双引号用于标识符,包括列名和表名,如
“症状”。“cui”

在doc第5.2节和第5.2节中,以下是分隔标识符的函数定义:

::=
以下是该类型的几种常见用途:

  • 根据5.2语法规则,双引号允许空格

    2),但显式包含的字符除外
    在和允许的情况下
    s在s和s中,
    除a、a或a外,a不得
    包括一个角色或其他角色。
    
  • 与常规标识符相比,双引号具有区分大小写的能力:

    13)A和A是等效的
    如果
    用等号替换的小写字母-
    借出大写字母)和的(所有出现的
    替换为,所有出现的替换为),视为
    重复指定一个
    SQL_文本的设计与实现-
    对大小写敏感的已定义排序规则,进行同等比较
    根据第8.2款中的比较规则,“”。
    
但是,一些RDBMS有自己的特殊字符、空格转义符号,这些符号不是ANSI标准。例如,SQL Server可以使用方括号
[…]
;MySQL可以使用backticks
`…`


单引号用于在char、varchar、text数据类型列(如
'C3714552'
)中括起字符串文本。您的错误消息会被引发,因为您使用了双引号,并且MySQL引擎正在查找一个列标识符,因为您将该值用双引号括起来

在doc的5.3中,以下是字符串文字的定义(不存在双引号):

::=
[  ]
[ ... ] 
[ { ...  [ ... ]  }... ]
根据5.3-语法规则:

1)在or中,顺序为:
... 
...  ... 
等价于序列
... ... 


尽管如此,MySQL提供了各种非ANSI语言,它们可能会对字符串文本使用双引号。但可能是后端API,如JDBC或ODBC,驱动程序默认为ANSI标准。

我猜sintomas包含字符串,您需要在查询中用引号分隔。sintomas.pop()是否等于该值?你可能需要在它周围加上单引号是的,就是这样!干杯,伙计!!!
Statement st1 = conn.createStatement();
ResultSet rs2 = st1.executeQuery("
   SELECT cui_2 
   FROM diagnostico.disease_has_symptom, diagnostico.symptom
   WHERE(
      `symptom`.`cui` = `disease_has_symptom`.`cui_2` AND 
      `symptom`.`cui` = " + sintomas.pop() + ");
");