-1
데이터베이스에 삽입하려고하는데 SQLException: Problem in your syntax, line 2
이 표시됩니다. 그래서 콘솔을 실행하기 전에 쿼리를 출력 한 다음 SQL 셸에 붙여 넣었습니다. 문제없이 실행되었습니다. 내가 뭘 잘못하고 있는지 모르겠다. 도와주세요.Java SQL에 잘못된 sytax가 있지만 쉘에서 쿼리를 실행하면 작동 함
Utilizador u = new Aluno("A55555","password","[email protected]","Cinco",false,new HashMap<>());
new UserDAO().put(u.getUserNum(),u);
SQL 쿼리 제작 :
START TRANSACTION;
INSERT INTO `Utilizador` (id, nome,pass, Email)
VALUES ('A55555', 'Cinco', 'password', '[email protected]')
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();
예외의 정확한 스택 추적을 게시하십시오. 하나의 명령문에서 여러 개의 쿼리를 실행한다는 것에주의하십시오. 그것은 MySQL에 의해 받아 들여질 수도 있지만 일반적으로 그렇지 않습니다. –
SQL에'\ n'을 명시 적으로 포함하는 것은 이상합니다. – chrylis
트랜잭션은 일반적으로 SQL 문을 사용하는 대신 API를 사용하여 시작됩니다. 그러나 이것이 특정 문제의 원인이 될 수있는 경우에는 도움이되지 않습니다. – treeno