java - 如何解决 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;
}
解决方案
注意错误消息“靠近'?' 在第 8 行"
首先,您必须确保“ps.setString(cont, (String) param);” 被实际执行。然后,我认为错误来自您尝试执行查询的方式。您似乎没有使用 PreparedStatement。它应该是这样的:
ps.executeQuery();
推荐阅读
- javascript - MongoDB - 使用变量中的名称设置嵌套字段
- python - Cloud Build 步骤中的 Cloud Run 集成测试?
- networking - 使用 mikrotik 阻止除 gmail 和 google 之外的所有网站
- azure - ASP.NET Core Application Insights 自适应采样
- nativescript-vue - Nativescript Vue:从ListView中的itemTap获取数组中的项目
- python - 将 Python 计算转换为 Octave 代码
- powerbi - 在 Power BI 上使用 DAX 创建自定义指标
- blockchain - Geth或Ganache的区别
- python-3.x - 是否有一个模块可以计算 Python 中字符串列表的出现次数?
- python-3.x - Python/云函数异步 POST 请求