Забывать вводить поле с PreparedStatement

Я хочу реализовать вопрос один обрезал тяжело для того, чтобы формулировать, для того, чтобы извиняться из-за предвосхищенный. Когда я буду реализовывать PreparedStatement, я подтверждаю, переменная ли - NULL или пустая с методом textoNoNULL (), если текст, он опустошил, как это случай переменной, ОНИ ШЛИ я хочу, чтобы он опустил действие, но как на решение надеется стоимость "они шли =?" меня отпускает ошибка, мне хотелось бы мочь реализовывать вышеупомянутое действие без того, чтобы ошибки, что я послал стоимость, которая не удаляла бы того, что содержит Базу данных из-за поля, он опустошил или NULL.

public void actualizarCuentaBancaria(){

      private String iban = "";
      private String entidad = 9012;
      private String sucursal= 0415;

            try {                
                    String sentencia = "UPDATE cuenta_bancaria SET iban= ?, entidad= ?, sucursal= ? WHERE id_persona = ?";

                    PreparedStatement pst = getConnection().prepareStatement(sentencia);                    


                    if(textoNoNULL(iban)) pst.setString(1, iban); else //AQUI
                    if(textoNoNULL(entidad)) pst.setString(2, entidad);
                    if(textoNoNULL(sucursal)) pst.setString(3, sucursal);

                    pst.setInt(6, idPersona);

                    pst.executeUpdate();
                    pst.close();
                } catch (SQLException ex) {

                } 
}

private boolean textoNoNULL(String palabra){
        if(palabra == null || palabra.length() == 0)
            return false;
        else 
            return true;    
}
0
задан 02.01.2017, 11:56
0 ответов

Если только iban может быть null таково, он тебе был бы достаточен:

if(textoNoNULL(iban)
       sentencia = "UPDATE cuenta_bancaria SET iban= ?, entidad= ?, sucursal= ? WHERE id_persona = ?";
else
       sentencia = "UPDATE cuenta_bancaria SET entidad= ?, sucursal= ? WHERE id_persona = ?";
                    PreparedStatement pst = getConnection().prepareStatement(sentencia);                    

                    int i=1;
                    if(textoNoNULL(iban)) {pst.setString(i, iban); i++;} //AQUI
                    if(textoNoNULL(entidad)) pst.setString(i, entidad); i++;
                    if(textoNoNULL(sucursal)) pst.setString(i, sucursal); i++;
                    pst.setInt(i, idPersona);

                    pst.executeUpdate();
                    pst.close();

Если другие поля также могут быть null, ты был бы должен строить себе решение прилагая тексты завися, если они недействительные или нет, решение было бы нечто похожим:

    sentencia="UPDATE cuenta_bancaria SET ";
    boolean comapendiente=false;
    if(textoNoNULL(iban) 
         {sentencia+="iban=? ";
          comapendiente=true;
         }
    if(textoNoNULL(entidad) 
          {if(comapendiente) sentencia+=",";
         sentencia+="entidad=? ";
          comapendiente=true;
         }
    if(textoNoNULL(sucursal) 
          {if(comapendiente) sentencia+=",";
         sentencia+="sucursal=? ";
         }
    sentencia+="WHERE id_persona = ?";
 int i=1;
                    if(textoNoNULL(iban)) {pst.setString(i, iban); i++;} //AQUI
                    if(textoNoNULL(entidad)) pst.setString(i, entidad); i++;
                    if(textoNoNULL(sucursal)) pst.setString(i, sucursal); i++;
                    pst.setInt(i, idPersona);

                    pst.executeUpdate();
                    pst.close();
2
ответ дан 03.12.2019, 17:54
  • 1
    Он не подает меня, потому что он может быть для любой Переменной, я поместил пример 3 полей, но у того, которого я должен делать, есть 30 полей. Спасибо в любом случае. –  02.01.2017, 13:01
  • 2
    Я обновил тебе ответ –  02.01.2017, 13:09
  • 3
    Он подал меня много, большое спасибо, я оставил solució n альтернатива –  02.01.2017, 14:47

Я улучшил решение, устранил переменную "comapendiente" из-за subString, который удаляет последний характер String, а именно удали "запятую".

public void actualizarCuentaBancaria(){
        try {  
                String sentencia = "UPDATE cuenta_bancaria SET ";

                if(textoNoNULL(iban)){
                    sentencia += " iban = ?,";
                }
                if(textoNoNULL(entidad)){
                    sentencia += " entidad= ?,";
                }
                if(textoNoNULL(sucursal)){
                    sentencia += " sucursal= ?,";
                }

                //Elimina la "coma" 
                sentencia = sentencia.substring(0, sentencia.length()-1); 

                sentencia +=" WHERE id_persona = ? ";

                int i = 1;

                PreparedStatement pst = getConnection().prepareStatement(sentencia);                                 

                if(textoNoNULL(iban)){ pst.setString(i, iban);  i++; }
                if(textoNoNULL(entidad)){ pst.setString(i, entidad);  i++; }
                if(textoNoNULL(sucursal)){ pst.setString(i, sucursal);   i++; }              

                pst.setInt(i, idPersona);

                pst.executeUpdate();
                pst.close();
            } catch (SQLException ex) {

            }
    }

private boolean textoNoNULL(String palabra){
        if(palabra == null || palabra.length() == 0)
            return false;
        else 
            return true;
}
-1
ответ дан 03.12.2019, 17:54
  • 1
    Я радуюсь arkham, я поместил тебе пример rá я прошу для того, чтобы ты видел способ это делать, приветствие, и прими ответ, если он подал тебя. –  02.01.2017, 15:06