0

我猜错误是在 sentenciaSQL 中,但我不知道如何修复它 =

public long guardar(PedidoDTO obj) throws SQLException {

PedidoDTO dto = new PedidoDTO();
String url="jdbc:mysql://127.0.0.1:3306/capacitacion?user=capacitacion&password=password";

try {
    Connection con = DriverManager.getConnection(url);
    String sentenciaSQL = "INSERT INTO capacitacion.pedido (id, fecha, total, folio) VALUES(NULL,'" +  obj.getId() + "," +  obj.getFecha() + ","+ obj.getTotal() + "," + obj.getFolio() + "')";
        PreparedStatement s =  con.prepareStatement(sentenciaSQL);
        s.executeUpdate();
        for(PedidoDetalleDTO detalle:obj.getPedidoDetalle()){
            dto.getId();
            dto.getFecha();
            dto.getTotal();
            dto.getFolio();
        }con.close();
} catch (SQLException e) {
    System.out.println(e);
}
return dto.getId();
}
4

3 回答 3

1

这不是 PreparedStatement 的好用法,应该是这样的:

String sentenciaSQL = "INSERT INTO capacitacion.pedido (id, fecha, total, folio) VALUES(?, ?, ?, ?)";
PreparedStatement s =  con.prepareStatement(sentenciaSQL);
s.setInt(1, obj.getId());
s.setDate(2, obj.getFecha());
s.setDouble(3, obj.getTotal());
s.setString(4, obj.getFolio());

顺便说一句,你为什么使用这个块代码:

for(PedidoDetalleDTO detalle:obj.getPedidoDetalle()){
    dto.getId();
    dto.getFecha();
    dto.getTotal();
    dto.getFolio();
}

看起来您想使用相同的方法在表中添加订单详细信息 (detalles de la orden/pedido),但不会以这种方式工作。如果您发布功能需求以帮助您解决实际问题,那就太好了。

于 2012-08-23T20:24:56.683 回答
1

仔细看。您犯的错误是您在 sentenciaSQL 中的第一个和最后一个变量都有单独的、未闭合的刻度线(在 ID 和作品集中):

VALUES(NULL,'" +  obj.getId()

和...

obj.getFolio() + "')";

由于您已经在使用准备好的语句,因此最好的方法是将您的值添加为参数,如下所示:

String sentenciaSQL = "INSERT INTO capacitacion.pedido (id, fecha, total, folio) VALUES(?,?,?,?)";
PreparedStatement s =  con.prepareStatement(sentenciaSQL);
s.setInt(1,obj.getId());
s.setDate(2,obj.getFecha());
s.setInt(3,obj.getTotal());
s.setString(4,obj.getFolio().toString());
s.execute();

请注意,我假设您的 Id 和 Total 是整数。您将需要替换为实际的数据类型。

此外,如果您不关心更新了多少行,则可以使用 execute() 而不是 executeUpdate()。任何一个都可以。

于 2012-08-23T20:26:56.690 回答
0

您正试图将五段数据插入四个字段。您的查询将尝试插入NULLinto idobj.getId()intofecha等。看起来删除NULL值列表中的 将是一个很好的第一步。

于 2012-08-23T20:22:06.847 回答