【问题标题】:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version [closed]您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册 [关闭]
【发布时间】:2014-05-30 02:47:11
【问题描述】:

我在尝试对我的 Java 代码执行 DAO 方法时收到此错误,说我的 sql sintax 中存在错误。当我在 MySQL 上手动执行此操作时,显然没有任何问题。

错误:

Informações:   com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as p inner join usuario as u on p.usuario = u.idusuario where p.idprestador=2' at line 1

DAO 方法:

public Prestador listarPrestadorDetalhe(int idprestador) {
    try {

        Connection conexao = Conexao.getConexao();

        PreparedStatement pstmt = conexao.prepareStatement("select p.telefone, p.celular, u.email"
                + "from prestador as p inner join usuario as u on p.usuario = u.idusuario where p.idprestador=?");

        Prestador prestador = new Prestador();

        pstmt.setInt(1, idprestador);

        ResultSet rs = pstmt.executeQuery();

        while (rs.next()) {
            prestador.usuario = new Usuario();

            prestador.setIdprestador(rs.getInt("idprestador"));
            prestador.setTelefone(rs.getString("telefone"));
            prestador.setCelular(rs.getString("celular"));
            prestador.usuario.setEmail(rs.getString("email"));

        }

        rs.close();
        pstmt.close();

        return prestador;
    } catch (ClassNotFoundException ex) {
        System.out.println(ex);
    } catch (SQLException sql) {
        System.out.println(sql);
    }
    return null;


}

SQL 脚本

select p.telefone, p.celular, u.email
from prestador as p inner join usuario as u on p.usuario = u.idusuario 
  where p.idprestador=2

【问题讨论】:

  • 我认为您需要在 u.emailfrom 之间留一个空格

标签: java mysql jdbc inner-join


【解决方案1】:

实际上,如果要输出创建的字符串,则有以下语句:

select p.telefone, p.celular, u.emailfrom prestador as p inner join usuario as u on p.usuario = u.idusuario where p.idprestador=?
--                                  ^^^^^

我想你可以看到问题。

【讨论】:

  • 我看不到问题所在。老师告诉我,可能和mysql jdbc版本有关。
【解决方案2】:
PreparedStatement pstmt = conexao.prepareStatement("select p.telefone, p.celular, u.email"
                + " from prestador as p inner join usuario as u on p.usuario = u.idusuario where p.idprestador=?");

这应该可以解决问题。

你的代码产生的sql是

select p.telefone, p.celular, u.emailfrom prestador as p inner join usuario as u on p.usuario = u.idusuario where p.idprestador=?

from 子句前需要一个空格。

【讨论】:

  • 你能解释一下你做了什么改变吗?这并不能真正帮助任何人了解发生了什么。
  • @AnubianNoob 请阅读编辑。
猜你喜欢
  • 2014-01-27
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 2019-01-11
相关资源
最近更新 更多