java sql语句版本错误

时间:2015-07-29 06:28:05

标签: java mysql

这就是我得到的

com.mysql.jdbc.exceptions.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 'order by idconsumo' at line 1

java.lang.IllegalArgumentException: Cannot set a null TableModel

 sSQL = "select c.idconsumo,c.idreserva,c.idproducto,p.nombre,c.cantidad,c.precio_venta "
                + ",c.estado from  consumo c inner join producto p on c.idproducto=p.idproducto"
                + " where c.idreserva = " + buscar +" order by idconsumo";

但仍将其保存在数据库中。如果我退出应用程序并再次打开它然后 记录已添加

2 个答案:

答案 0 :(得分:1)

首先,如Jon建议的那样,使用参数化的SQL。

您需要对SQL进行一些更改,如下所示:

"select c.idconsumo, c.idreserva, c.idproducto, p.nombre, c.cantidad, c.precio_venta, c.estado from  consumo c inner join producto p on c.idproducto=p.idproducto where c.idreserva = " + buscar +" order by c.idconsumo";

确保buscar是变量而c.idreserva是非int列,然后在c.idreserva = '" + buscar +"'order by c.idconsumo

之间添加单引号

使用预备陈述:

String sql = "select c.idconsumo, c.idreserva, c.idproducto, p.nombre, c.cantidad, c.precio_venta, c.estado from  consumo c inner join producto p on c.idproducto=p.idproducto where c.idreserva = ? order by c.idconsumo";
PreparedStatement prepStmt = conn.prepareStatement(sql);
//if buscar is string type
prepStmt.setString(1, buscar);
ResultSet rs = prepStmt.executeQuery();

答案 1 :(得分:1)

查询语法错误。请检查:

   String sql = " select c.idconsumo,c.idreserva,c.idproducto,p.nombre,"
               +" c.cantidad,c.precio_venta, c.estado "
               +" from  consumo c inner join producto p on "
               +" c.idproducto=p.idproducto "
               +" where c.idreserva ='" + buscar +"' order by c.idconsumo ";

PreparedStatement可以更准确地使用。

PreparedStatement是一种特殊的Statement对象,具有一些有用的功能。请记住,您需要一个Statement才能执行查询或更新。您可以使用PreparedStatement而不是Statement,并从PreparedStatement的功能中受益。

PreparedStatement的主要功能是:

  

易于将参数插入SQL语句中。易于重复使用   带有新参数的PreparedStatement。可能会提高性能   执行的陈述。实现更轻松的批量更新。

       String sql = " select c.idconsumo,c.idreserva,c.idproducto,p.nombre,"
                   +" c.cantidad,c.precio_venta, c.estado "
                   +" from  consumo c inner join producto p on "
                   +" c.idproducto=p.idproducto "
                   +" where c.idreserva = ? order by c.idconsumo ";

PreparedStatement preStmt = conn.prepareStatement(sql);
preStmt.setInt(1, buscar);
ResultSet rs = preStmt.executeQuery();