hola buen dia, soy un novato en esto de java, recurro a este foro por que tengo un proyecto en java en donde ocupo validar si existe un registro en la tabla1(id_pedido), y si existe insertarlo en tabla2(id_ticket, id_pedido, total) y si existe avisar al usuario que no existe quisiera saber como seria la extructura de la sintaxis alguna critica constructiva por aqui? gracias.
public void AgregarAsociacion(int idpedido, int idticket, double total) {
String sql= "UPDATE ticket SET id_pedido=? and ticket=? where total=?";
try{
PreparedStatement ps= null;
ps= super.prepareStatement(sql);
ps. setInt(1, idticket);
ps.setInt(2, idpedido);
ps.setInt(3, (int) total);
ps.executeUpdate();
}catch(Exception e){
logger.error("error", e);
logger.error("Query"+ sql);
}
}
Java? Algun error?
public void AgregarAsociacion(int idpedido, int idticket, double total) {
String sql = "UPDATE ticket SET id_pedido=? and ticket=? where total=?";
try{
PreparedStatement ps = null;
ps = super.prepareStatement(sql);
ps.setInt(1, idticket);
ps.setInt(2, idpedido);
ps.setInt(3, (int)total);
ps.executeUpdate();
}catch(Exception e){
logger.error("error", e);
logger.error("Query"+ sql);
}
}
si fijate que estoy tratando de hacer un metodo que verifique que exista el id_pedido en tabla1 , cuando valide hacer un update o insert a tabla2 con los campos (id_ticket, id_pedido, total) pero no se como implementarlo ayuda :/
para validad si existe un registro en la tabla 1 yo lo aria haci
public void consulta()
{
int Conteo=0;
try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(connectionUrl);
stmt = con.createStatement();
String sql ="select Count(id_pedido)as conteo from tabla1 where id_pedido=?";
rs= stmt.executeQuery(sql);
while(rs.next)
{
Conteo=rs.getInt("conteo");
}
}catch (SQLException ex)
{
}
if(Conteo==0)
{
// no hay registros
}
if(Conteo>0)
{
// hay registros
}
}
no hace nada :(
tengo 2 tablas tabla1(id_pedido,id_cliente,id_em,descripcion) y tabla2(id_ticket,id_pedido,id_cliente)
la idea aqui es("ASOCIAR ") id_pedido de taba1 con el id_pedido de tabla2
lo estoy intentando por clases tengo 1 clase en donde contiene los metodos SET y GET de id_pedido, id_ticket y total
y tengo 1 clase en donde se pongo los metodos
es por eso que ocupo validar la exitencia del "id_pedido" en tabla1 para luego poder hacer el update o insert en la tabla2 (id_ticket, id_pedido, total
-------------------------
public void AsociarR(Asocacion AsoPrueba) {
int Conteo=0;
try{
String sql="select Count(id_pedido)AS Conteo FROM pedido_movil where id_pedido=? ";
super.execQuery(sql);
while(super.next()){
Conteo=super.getColInt(AsoPrueba.getIdpedido());
}
}catch(SQLException ex){
}
if(Conteo==0){
//no hay
JOptionPane.showMessageDialog(null, "este registro no existe");
}
if(Conteo>0){
// hay registros
String sql= "update ticket set id_pedido=? and ticket=? where total=";
try{
PreparedStatement ps= null;
ps= super.prepareStatement(sql);
ps.setInt(1, AsoPrueba.getIdpedido());
ps.setInt(2, AsoPrueba.getIdticket());
ps.setInt(3, (int) AsoPrueba.getTotal());
ps.executeUpdate();
}catch(SQLException ex){
logger.error("error", ex);
logger.error("Query"+ sql);
}
JOptionPane.showMessageDialog(null, "REGISTRO ASOCIADO");
}
}
-----------------------
Aplicando el patrón DAO, representamos las tablas como clases:
public class Ticket {
private int id;
private Request request;
private double total;
public Ticket() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Request getRequest() {
return request;
}
public void setRequest(Request request) {
this.request = request;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
}
public class Request {
private int id;
private int state;
public Request() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
}
Creamos un método en el DAO de Request (pedido) que busque un pedido por ID:
public Request find(String id) {
String sql = "SELECT * FROM pedidos WHERE id_pedido = ?";
PreparedStatement preparedStatement= null;
Connection connection = null;
ResultSet result = null;
Request request = null;
try {
connection = DBHelper.getConnection();
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1,id);
result = preparedStatement.executeQuery();
if(result.next()) {
request = new Request();
while(result.next()) {
request.setId(result.getString("request_id"));
request.setState(result.getInt("state"));
}
}
} catch (SQLException | NullPointerException e) {
logger.error("Ha ocurrido un error: "+e.getLocalizedMessage());
} finally {
if(connection != null)
connection.close();
if(preparedStatement != null)
preparedStatement.close();
if(result != null)
result.close();
}
return request;
}
Creamos un método que inserte un Ticket con un Request especificado:
public boolean insertTicket(Ticket ticket) {
String SQL = "INSERT INTO tickets(ticket_id, pedido_id, total)
VALUES(?,?,?)";
PreparedStatement preparedStatement= null;
Connection connection = null;
boolean operationState = false;
try {
connection = DBHelper.getConnection();
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1,ticket.getId());
preparedStatement.setInt(2,ticket.getRequest().getId());
preparedStatement.setDouble(3,total);
operationState = preparedStatement.executeUpdate();
} catch (SQLException | NullPointerException e) {
logger.error("Ha ocurrido un error: "+e.getLocalizedMessage());
} finally {
if(connection != null)
connection.close();
if(preparedStatement != null)
preparedStatement.close();
}
return operationState;
}
Así o mantenemos simple y ordenado. Primero buscamos el pedido por ID. Si éste existe, creamos un nuevo objeto Ticket le asignamos un ID, un total y le asociamos un pedido (Request). Luego lo insertamos en la BD:
Request request = find(REQUEST_ID);
if(request != null) {
Ticket ticket = new Ticket();
ticket.setId(1);
ticket.setRequest(request);
ticket.setTotal(2000);
insertTicket(ticket);// o utilizar el boolean devuelto para algo...
}
else {
// mostrarle al usuario que el pedido no existe
}
Te recomiendo que uses el framework ORM Hibernate. Lee al respecto.