这就是我得到的
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";
但仍将其保存在数据库中。如果我退出应用程序并再次打开它然后 记录已添加
答案 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();