Создание метода для вставки данных в разные таблицы

#java #mysql #insert #prepared-statement

#java #mysql #вставить #подготовленное утверждение

Вопрос:

Я хочу создать единый метод для выполнения вставок в разные таблицы, я хочу, чтобы пользователь вводил в качестве параметров имя таблицы и список данных, которые нужно вставить.

Что-то вроде этого:

 public void insertar(String tabla, LinkedList data) 
{
    String alta = "insert into "   tabla   " values(";
    for(int i = 0; i < datos.size(); i  ) {
        alta = alta   "?,";
    }
    alta = alta.substring(0, alta.length() - 1)   ")";
    System.out.println(alta);
    try 
    {
        PreparedStatement insertar = con.prepareStatement(alta);
    } 
    catch (SQLException ex) 
    {
    }
}
  

Моя проблема в том, что я не могу понять, как установить значения, как только
Строка создается потому, что размер и тип данных могут меняться в зависимости от
таблица, которую я использую.

Есть ли способ сделать это?, или мне нужно сделать это по-другому?

Заранее спасибо!

Ответ №1:

Ваш связанный список, вероятно, должен содержать что-то другое, чем String ‘s. Рассматривали ли вы возможность создания типа Binding класса, который знает, как устанавливать значения в вашем PreparedStatement? Я предполагаю что-то вроде этого:

 public abstract class Binding {
    public abstract void bind(PreparedStatement ps) throws SQLException;
}

public class IntegerBinding extends Binding {
    private int value;
    private int index;

    public IntegerBinding(int _index, int _value) {
        index = _index;
        value = _value;
    }

    public void bind(PreparedStatement ps) throws SQLException {
        ps.setInt(index, value);
    }
}
  

Вы можете использовать значение, которое вы пытаетесь применить к PreparedStatement и индекс в PreparedStatement , чтобы создать свою конкретную Binding реализацию. Конечно, вам нужно было бы написать свои собственные Binding подклассы, чтобы охватить другие типы данных, которые вы заинтересованы в использовании.

Вот небольшая модификация вашего кода, чтобы иметь возможность использовать идеи, изложенные выше:

 public void insertar(String tabla, List<Binding> bindings) 
{
    String alta = "insert into "   tabla   " values(";
    for(int i = 0; i < datos.size(); i  ) {
        alta = alta   "?,";
    }
    alta = alta.substring(0, alta.length() - 1)   ")";
    System.out.println(alta);
    try 
    {
        PreparedStatement insertar = con.prepareStatement(alta);
        for(Binding binding : bindings)
        {
            binding.bind(insertar);
        }
        insertar.execute();
    } 
    catch (SQLException ex) 
    {
    }
}
  

Я думаю, что это довольно удобное решение, и я надеюсь, что оно вам поможет. Удачи!

Комментарии:

1. Хорошо, я внедрю это решение и посмотрю, работает ли оно. Спасибо =)

2. Большое вам спасибо, я реализовал это, и это сработало. Большое спасибо =)