首页 > 解决方案 > 如何解决 JAVA SQL 语法错误:错误代码 1064

问题描述

当我创建一个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;
                }

标签: javamysqlsql

解决方案


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

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

ps.executeQuery();

推荐阅读