如何解决 JAVA SQL 语法错误:错误代码 1064

Posted

技术标签:

【中文标题】如何解决 JAVA SQL 语法错误:错误代码 1064【英文标题】:How can i solve JAVA SQL Syntax Error : Error Code 1064 【发布时间】:2021-05-12 16:44:30 【问题描述】:

我在创建prepareStatement 时有这个SQL 语句,我将SQL 语句发送给它。在此之后,我尝试使用 setString 传递参数,但出现此错误:

java.sql.SQLSyntaxErrorException: 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 '?' at line 8

SQL语句如下:

public static final String SQL_SELECT_RESERVA_BY_CLIENTEDNI =   "SELECT `reserva`.`NUMERO_RESERVA`,\r\n"
                                                                    + "`reserva`.`CLIENTE_DNI`,\r\n"
                                                                    + "`reserva`.`PENSIONES_TIPO_PENSION`,\r\n"
                                                                    + "`reserva`.`FECHA_ENTRADA`,\r\n"
                                                                    + "`reserva`.`FECHA_SALIDA`,\r\n"
                                                                    + "`reserva`.`NUMERO_HUESPEDES`\r\n"
                                                                    + "FROM `hotel`.`reserva`\r\n"
                                                                    + "WHERE CLIENTE_DNI=?;";

如果我们按照错误提示更改问号,用“?”包围它,则会发生另一个错误:

Parameter index out of range (1 > number of parameters, which is 0).

我们认为是在使用 ps.setString 添加参数时发生错误

objDatos.Connect();
tabla = objDatos.Consulta(SQL_SELECT_RESERVA_BY_CLIENTEDNI, parametros);
objDatos.Disconnect();
public ArrayList<itfData> Consulta(String sql, ArrayList<Object>parametros)
     
            ArrayList<itfData>resultado;
            resultado=new ArrayList <itfData>();
            
            try 
            
                ps = conn.prepareStatement(sql);

                if(parametros !=null)
                
                    this.CompletarParametrosQuery(parametros);
                
private void CompletarParametrosQuery(ArrayList<Object> parametros) 
        int cont = 1;
    
        for (Object param : parametros) 
            try 
                if (param instanceof String)
                
                
                    ps.setString(cont, (String) param);
                    cont++;
                    continue;
                

【问题讨论】:

尝试去掉分号,不需要语句分隔符 我已经试过了,我得到了同样的第一个错误,告诉我输入''。 你可以试试JPA或者Criteria。 已解决:***.com/questions/4131092/… 【参考方案1】:

请注意错误消息“靠近'?'在第 8 行"

首先,您必须确保“ps.setString(cont, (String) param);”被实际执行。 然后,我认为错误来自您尝试执行查询的方式。您似乎没有使用 PreparedStatement。应该是这样的:

ps.executeQuery();

【讨论】:

以上是关于如何解决 JAVA SQL 语法错误:错误代码 1064的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 vb.net 中的这个 SQL 语法错误?

java.sql.SQLException:语法错误

Java 中的 SQL 语法错误

如何解决错误“java.sql.SQLException:结果集开始之前” [重复]

我的 java 程序的 SQL 语法错误

Java Jdbc SQL 异常(语法错误)