Создание метода для вставки данных в разные таблицы - PullRequest
1 голос
/ 27 мая 2011

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

Примерно так:

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 Ответ

1 голос
/ 27 мая 2011

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

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) 
    {
    }
}

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

...