JavaSQL说我的sytax不正确,但在shell中运行查询是可行的

JavaSQL说我的sytax不正确,但在shell中运行查询是可行的,java,mysql,exception,jdbc,syntax,Java,Mysql,Exception,Jdbc,Syntax,我试图插入到我的数据库中,但我得到了SQLException:语法中的问题,第2行。 因此,在运行查询之前,我将其打印到控制台,然后将其粘贴到SQLshell中,它就可以正常运行了。我不知道我做错了什么,请帮忙 Utilizador u = new Aluno("A55555","password","cinco@email.com","Cinco",false,new HashMap<>()); new UserDAO().put(u.getUserNum(),u); 爪哇: 语

我试图插入到我的数据库中,但我得到了
SQLException:语法中的问题,第2行
。 因此,在运行查询之前,我将其打印到控制台,然后将其粘贴到SQLshell中,它就可以正常运行了。我不知道我做错了什么,请帮忙

Utilizador u = new Aluno("A55555","password","cinco@email.com","Cinco",false,new HashMap<>());
new UserDAO().put(u.getUserNum(),u);
爪哇:


语句
PreparedStatement
用于单个语句,而不是多个语句。您必须一次执行一个异常。

发布异常的准确完整堆栈跟踪。请注意,您正在一条语句中执行多个查询。MySQL可能会接受这一点,但通常不会。在SQL中显式包含
\n
也很奇怪。事务通常使用API而不是SQL语句启动。。。但我不是舒尔,如果这可能是您的特殊要求的原因problem@JBNizet只有当MySQL连接被显式配置为执行多个语句(allowMultiQueries=true)时,才会接受多个语句可能重复的语句
START TRANSACTION;
INSERT INTO `Utilizador` (id, nome,pass, Email)
VALUES ('A55555', 'Cinco', 'password', 'cinco@email.com')
ON DUPLICATE KEY UPDATE id=VALUES(id),
  pass=VALUES(pass),
  nome=VALUES(nome),
  Email=VALUES(Email);
INSERT INTO `Aluno` (Utilizador_id, eEspecial)
VALUES ('A55555',0)
ON DUPLICATE KEY UPDATE Utilizador_id=VALUES(Utilizador_id),
                            eEspecial=VALUES(eEspecial);
String sql = "START TRANSACTION;\n" +
        "INSERT INTO `Utilizador` (id, nome,pass, Email) \n" +
        "VALUES (?, ?, ?, ?)\n" +
        "ON DUPLICATE KEY UPDATE id=VALUES(id),\n" +
        "                        pass=VALUES(pass),\n" +
        "                        nome=VALUES(nome),\n" +
        "                        Email=VALUES(Email);\n";
StringBuilder s = new StringBuilder(sql);
if (value instanceof Docente){
    s.append("INSERT INTO `Docente` (Utilizador_id)\n" +
             "VALUES (?)\n" +
             "ON DUPLICATE KEY UPDATE Utilizador_id=VALUES(Utilizador_id);");
}else if (value instanceof Aluno){
    s.append("INSERT INTO `Aluno` (Utilizador_id, eEspecial)\n" +
             "VALUES (?,?)\n" +
             "ON DUPLICATE KEY UPDATE Utilizador_id=VALUES(Utilizador_id), eEspecial=VALUES(eEspecial);");
}else if (value instanceof DiretorDeCurso){
    s.append("INSERT INTO `DiretorDeCurso` (Utilizador_id)\n" +
             "VALUES (?)" +
             "ON DUPLICATE KEY UPDATE Utilizador_id=VALUES(Utilizador_id);\n");
}else{
    return null;
}
System.out.println(s.toString());
PreparedStatement stm = connection.prepareStatement(s.toString());
stm.setString(1, value.getUserNum());
stm.setString(2, value.getName());
stm.setString(3, value.getPassword());
stm.setString(4, value.getEmail());
stm.setString(5, value.getUserNum());
if(value instanceof Aluno) stm.setBoolean(6,((Aluno) value).eEspecial());
System.out.println(stm.toString());
stm.executeUpdate();